gpt4 book ai didi

node.js - NodeJS - 在使用 multer 上传多个文件之前验证扩展名?

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:08 26 4
gpt4 key购买 nike

我遇到过 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 的多个上传选项,但没有成功,并且没有 promise 在上传第一个之前它会真正阻​​止。

有什么想法吗?

最佳答案

首先,在前端部分,您可以使用 accept 指定您的上传按钮接受的 MIME 类型。输入标签的属性。

在背面,您可以使用 express-fileupload ,获取 mime 类型或仅获取文件名称,并在不匹配时返回错误。

示例:

const fileUpload = require('express-fileupload');
const customCheckFiles = (req, res, next) => {
const fileNames = Object.keys(req.files).map(key => req.files[key].name);
return fileNames.every(filename => !!filename.match(/\.(jpg|jpeg|png|gif)$/))
? next() // let multer do the job
: res.status(400).json({error: "Wrong image formats"});
}

app.post(
'/upload',
fileUpload(),
customCheckFiles
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.')
});

我没有测试代码,它只是作为示例。

希望有帮助,
最好的问候

关于node.js - NodeJS - 在使用 multer 上传多个文件之前验证扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52078563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com