【发布时间】:2019-02-04 07:24:39
【问题描述】:
我遇到过 multer 并上传到 S3: 我通过以下方式发送 5 张图片:
app.post(
'/upload',
upload.fields(
[
{ name: 'image', maxCount: 1 },
{ name: 'image2', maxCount: 1 },
{ name: 'image3', maxCount: 1 },
{ name: 'image4', maxCount: 1 },
{ name: 'image5', maxCount: 1 }
]),
(req, res, next) => {
res.status(200).send('Files uploaded successfully.')
});
使用以下 multer 实现:
var upload = multer({
storage: multerS3({
s3: s3,
bucket: myBucket,
fileFilter: (res, file, callback) => {
var ext = path.extname(file.originalname);
if(ext !== '.png' && ext !== '.jpg' && ext !== '.jpeg') {
res.status(400).send('Only images are allowed')
}
callback(null, true)
},
acl: 'public-read',
contentType: multerS3.AUTO_CONTENT_TYPE,
key: function (req, file, cb) {
uuidFileName = uuidv4();
fileNamesArray.push(uuidFileName);
if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/)) {
return cb(new Error('Only image files are allowed!'));
}
cb(null, uuidFolderName + '/' + uuidFileName + '.' + mime.getExtension(file.mimetype))
}
})
})
我的问题是,例如,当客户端以 PDF 格式发送第五张图片时,已经将 4 张图片上传到 S3。虽然删除它们并取消整个过程效率不高,但我一直在研究 multer 的多次上传选项但没有成功,并且没有保证在上传第一个之前它实际上会阻止。
有什么想法吗?
【问题讨论】:
-
这会有点离题,但你确定你的
fileFilter函数工作正常吗?从 Multer 的文档中可以看出,第一个参数是req,而不是res。请看here。无论如何,你应该使用return res.status(...)。如果没有return声明,您的callback将始终被解雇。
标签: node.js express multer multer-s3