我试图弄清楚Node.js中的文件上传和处理是如何工作的,我不确定Multer在这件事上的责任是什么。 Multer的唯一目的是向请求对象添加一个body对象和files对象吗? 编辑和保存文件到文件系统是否应该由不同的包完成?
虽然我可以看到我可以设置multer在files对象中自动保存文件,但似乎选项非常有限,图像处理不在multer的范围之内。 那是不是意味着我需要另一个专门处理图像处理的包?
该包是否会从files对象中获取文件流缓冲区,并将其变成一个实际的文件,然后将所有更改应用于该文件?
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文章