gpt4 book ai didi

node.js - 如何使用 Multer 中间件验证文件扩展名

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:41 24 4
gpt4 key购买 nike

我使用 Multer 上传文件或图像。问题是无法验证真实的文件扩展名。

示例:如果有人将filename.exe重命名为filename.png,那么仍然可以上传。

您能给我建议解决此问题的解决方案吗?谢谢

我这样使用,但需要验证文件的真实扩展名

fileFilter: async function (req, file, callback) {
var ext = path.extname(file.originalname);
if(ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg' && ext !== '.zip') {
return callback(new Error('Only images and zip are allowed'));
}
// I want next function to validate real ext of files here.
callback(null, true);
},

最佳答案

从 Multer 2.x.x 开始,您可以检查上传参数的扩展名和 MIME 类型。这是示例代码。

const storage = multer.diskStorage({
destination: './uploadedContent',
filename: function(_req, file, cb){

cb(null,file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
var upload = multer({
storage: storage,
limits: {
fields: 5,
fieldNameSize: 50, // TODO: Check if this size is enough
fieldSize: 20000, //TODO: Check if this size is enough
// TODO: Change this line after compression
fileSize: 15000000, // 150 KB for a 1080x1080 JPG 90
},
fileFilter: function(_req, file, cb){
checkFileType(file, cb);
}
}).single('postPicture');
function checkFileType(file, cb){
// Allowed ext
const filetypes = /jpeg|jpg|png|gif/;
// Check ext
const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
// Check mime
const mimetype = filetypes.test(file.mimetype);

if(mimetype && extname){
return cb(null, true);
} else {
return cb(null, false);
}
}

也不要忘记检查您的文件权限。您不希望以某种方式执行上传的文件。遗憾的是,最新的 npm 版本是 1.4.3,其中 Multer mime 类型基于来自客户端的类型属性。该属性至少在 Windows 中取决于文件扩展名,而不是文件内容。

关于node.js - 如何使用 Multer 中间件验证文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60408575/

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