提问者:小点点

Multer的唯一目的是向请求对象添加一个body对象和files对象吗? 编辑和保存是否应该由不同的包完成?


我试图弄清楚Node.js中的文件上传和处理是如何工作的,我不确定Multer在这件事上的责任是什么。 Multer的唯一目的是向请求对象添加一个body对象和files对象吗? 编辑和保存文件到文件系统是否应该由不同的包完成?

虽然我可以看到我可以设置multer在files对象中自动保存文件,但似乎选项非常有限,图像处理不在multer的范围之内。 那是不是意味着我需要另一个专门处理图像处理的包?

该包是否会从files对象中获取文件流缓冲区,并将其变成一个实际的文件,然后将所有更改应用于该文件?


共1个答案

匿名用户

multer只是一个中间件,用于处理来自multipart/form-data头的请求的数据,您不能用它来进行图像处理,尽管很少有像multer-sharp或multer-sharp-s3(用于上载到S3 bucket)这样的软件包将图像处理库与multer集成在一起。

Multer的唯一目的是向请求对象添加一个body对象和files对象吗?

以及您想要存储文件的位置(multer storage)

那是不是意味着我需要另一个专门处理图像处理的包?

是的,multer一个人不能像我上面提到的那样做任何图像处理。 你可以用像夏普这样的东西来做图像处理。

该包是否会从files对象中获取文件流缓冲区,并将其变成一个实际的文件,然后将所有更改应用于该文件?

是的,例如使用sharp Library:

router.post('/upload',upload.single('image') ,async (req, res) => {
   const { filename: image } = req.file 

   await sharp(req.file.path)
    .resize(500)
    .jpeg({quality: 50})
    .toFile(
        path.resolve(req.file.destination,'resized',image)
    )
    fs.unlinkSync(req.file.path)

    return res.send('SUCCESS!')
})

这个例子取自这个dev.to文章