无法使 multer filefilter 错误处理工作
我正在尝试在 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");
}
)}
)}
回答如下:
fileFilter 函数可以访问请求对象 (req)。该对象在您的路由器中也可用。
因此在fileFitler中你可以添加带有验证错误或验证错误列表的属性(你可以上传很多文件,其中一些可以通过)。 在路由器中,您检查是否存在错误的属性。
在过滤器中:
fileFilter: function (req, file, cb) {
if (file.mimetype !== 'image/png') {
req.fileValidationError = 'goes wrong on the mimetype';
return cb(null, false, new Error('goes wrong on the mimetype'));
}
cb(null, true);
}
在路由器中:
router.post('/upload',function(req,res){
upload(req,res,function(err) {
if(req.fileValidationError) {
return res.end(req.fileValidationError);
}
)}
)}
无法使 multer filefilter 错误处理工作
我正在尝试在 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");
}
)}
)}
回答如下:
fileFilter 函数可以访问请求对象 (req)。该对象在您的路由器中也可用。
因此在fileFitler中你可以添加带有验证错误或验证错误列表的属性(你可以上传很多文件,其中一些可以通过)。 在路由器中,您检查是否存在错误的属性。
在过滤器中:
fileFilter: function (req, file, cb) {
if (file.mimetype !== 'image/png') {
req.fileValidationError = 'goes wrong on the mimetype';
return cb(null, false, new Error('goes wrong on the mimetype'));
}
cb(null, true);
}
在路由器中:
router.post('/upload',function(req,res){
upload(req,res,function(err) {
if(req.fileValidationError) {
return res.end(req.fileValidationError);
}
)}
)}