我在Node.js/Multer中尝试文件上传。
我得到了存储和限制工作。但是现在我正在使用filefilter来简单地通过mimetype
拒绝一些文件,如下所示:
fileFilter: function (req, file, cb) {
if (file.mimetype !== 'image/png') {
return cb(null, false, new Error('goes wrong on the mimetype'));
}
cb(null, true);
}
当上传的文件不是PNG时,它不会接受它。但它也不会触发if(err)
当文件太大时,它会产生错误。因此,不知何故,我需要生成一个错误的filefilter
以及,但我不知道如何猜测new Error
是错误的。
那么,如果文件不正确,我应该如何生成错误呢?我做错了什么?
完整代码:
var maxSize = 1 * 1000 * 1000;
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, 'public/upload');
},
filename: function (req, file, callback) {
callback(null, file.originalname);
}
});
var upload = multer({
storage : storage,
limits: { fileSize: maxSize },
fileFilter: function (req, file, cb) {
if (file.mimetype !== 'image/png') {
return cb(null, false, new Error('I don\'t have a clue!'));
}
cb(null, true);
}
}).single('bestand');
router.post('/upload',function(req,res){
upload(req,res,function(err) {
if(err) {
return res.end("some error");
}
)}
)}
4条答案
按热度按时间cwxwcias1#
fileFilter函数有权访问请求对象(req)。此对象在路由器中也可用。
因此,在fileFitler中,您可以添加带有验证错误或验证错误列表的属性(您可以上传许多文件,其中一些可以通过)。在路由器中,您检查是否存在错误属性。
在过滤器中:
在路由器中:
csbfibhn2#
可以将错误作为第一个参数传递。
rdlzhqv93#
更改
fileFilter
并将错误传递给cb
函数:pepwfjgg4#
fileFilter回调应为:
请求中的错误处理:
MulterError
时访问多路器错误