使用Multer上传后如何使用Sharp JS压缩图像

时间:2020-09-25 03:12:59

标签: node.js express multer sharp

这时我觉得我的代码是完整的科学怪人,但我确实想知道为什么这个公式不起作用。

文件上传后,我可以使用req.file.path访问该路径,因此我尝试将其插入Sharp,但是什么也没有发生。我没有收到任何错误或预期的结果。 (我正在使用.rotate()使它在测试中更加明显)

    var storage = multer.diskStorage({
        destination: function(req, file, cb) {
            cb(null, 'public/uploads')
        },
        filename: function(req, file, cb) {
            cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
        }
    });
    
    var upload = multer({
        storage: storage
    });
    
    router.post("/new", upload.single('image'), function(req, res) {

    sharp(req.file.path).rotate();
    
        var post = {
            title: req.body.title,
            image: uploadedImage,
            description: req.body.description,
            body: req.body.body
        }
    
        Blog.create(post, function(err, newPost) {
            if (err) {
                console.log(err);
                res.redirect("/")
            } else {
                res.redirect("/");
            }
        });
    });

1 个答案:

答案 0 :(得分:0)

您需要使用async/await或Promises,因为对sharp的调用是异步的。您还需要对修改/旋转后的文件执行某些操作,例如将其复制到Buffer或保存到File。请参阅文档中的these examples

// use an async function
router.post("/new", upload.single('image'), async function(req, res) {
  await sharp(req.file.path).rotate().toFile('/path/to/file');
  // ... rest of your code
});