我正在使用上传文件multer
在我的nodejs(express js)应用程序中,它运行良好。我在那里进行了 mime 类型检查,也只允许 png 文件,但如果我更改上传文件的扩展名abc.exe
to abc.png
它也会被上传,这是错误的。
这是我的代码。
var multer = require('multer');
var imagefolder = __base + 'public/complaintimages/';
var diskstorage = multer.diskStorage({
destination: function (req, file, cb) {
if (common.ImageMimeTypes.indexOf(file.mimetype) < 0) {
common.ActionOutput.Status = common.ActionStatus.WrongFileUploaded;
common.ActionOutput.Message = 'Invalid image file: ' + file.originalname;
cb(new Error('FileUpload:' + common.ActionStatus.WrongFileUploaded), null);
} else
cb(null, imagefolder);
},
filename: function (req, file, cb) {
var filenm = randomstring.generate(10);
//console.log(filenm + file.originalname);
cb(null, filenm + file.originalname);
}
});
var upload = multer({
storage: diskstorage
});
它应该检查文件内容的 MIME 类型。将 other 重命名为 png 则不应上传。这似乎是图书馆的错误。
请指教。
在您的路由处理程序中,当您拥有保存的文件名时,您可以使用mmmagic https://www.npmjs.com/package/mmmagic module:
var mmm = require('mmmagic'),
var magic = new mmm.Magic(mmm.MAGIC_MIME_TYPE);
magic.detectFile(fileName, function (err, mime) {
if (err) {
// handle error
} else {
// check the mime
// and remove the file if you don't like it
// plus send a correct response to the client
}
});
Update
If mmmagic
不适合你那么你可以使用file-type
模块,但它适用于缓冲区,因此您首先必须将文件(或其某些部分)读入缓冲区并使用以下命令检查 mime 类型file-type
. The read-chunk
模块可以方便地读取部分文件。
See:
- https://www.npmjs.com/package/file-type https://www.npmjs.com/package/file-type
- https://www.npmjs.com/package/read-chunk https://www.npmjs.com/package/read-chunk
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)