我正在使用插件fileFilter
选项multer
来决定是否应将图像保存到服务器上。
在该fileFilter
功能中,我想检查magic bytes
这些图像以确保它们是真实图像且格式正确。Multer
仅公开上传图像文件的json array
文件,如下所示。但我需要实际的图像文件来检查magic bytes
。
{ fieldname: 'file',
originalname: 'arsenal-home-kit.jpg',
encoding: '7bit',
mimetype: 'image/jpeg' }
我在下面的代码中评论了我的详细问题。我的尝试如下;
var storage = multer.diskStorage({
destination: __dirname + '/../public/images/',
filename: function (req, file, cb) {
console.log(file.originalname);
crypto.pseudoRandomBytes(16, function (err, raw) {
if (err) return cb(err);
cb(null, raw.toString('hex') + path.extname(file.originalname))
})
}
});
var upload = multer({
storage: storage,
fileFilter: function (req, theFile, cb) {
// using image-type plugin to check magic bytes
// I need actual image file right at here.
// theFile is json array, not the image file.
// How to I get the actual image file to check magic bytes.
if (imageType(theFile).ext === "jpg") {
// To accept the file pass `true`, like so:
cb(null, true);
} else {
// To reject this file pass `false`, like so:
cb(null, false);
}
}
});
PS 我决定使用图像类型插件来检查这些魔术字节。