最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

无法使 multer filefilter 错误处理工作

IT培训 admin 3浏览 0评论

无法使 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);
        }
    )}
)}
发布评论

评论列表 (0)

  1. 暂无评论