如果用户验证失败,请在multer中停止文件上载

Kar*_*hik 3 node.js express multer

文件上传由multer使用此代码完成,但如何在用户验证失败时停止文件上载.在此代码中写入用户验证部分的位置

router.post('/profilePicture',
 multer({dest: './uploads/',
rename: function (fieldname, filename,req,res) {
      return image = req.body.userId+'-'+dateTime+'-'+randomId();
    },
    onFileUploadStart: function (file,req,res) {
        if(file.mimetype !== 'image/jpg' && file.mimetype !== 'image/jpeg' && file.mimetype !== 'image/png') {
          imageUploadDone = false;
          return false;
        }
        //console.log(file.originalname + ' is starting ...');
    },
    onFileUploadComplete: function (file,req,res) {
      //console.log(file.fieldname + ' uploaded to  ' + file.path);
      if(file.mimetype == 'image/jpg')
        extn  = '.jpg';
      if(file.mimetype == 'image/jpeg')
        extn  = '.jpeg';
      if(file.mimetype == 'image/png')
        extn  = '.png';
      imageUploadDone=true; 
    }
}),function(req, res) { 
      upload(req,res,function(err) {
    if(imageUploadDone==true){
      //console.log(image);
      var userInfo = {'userId':req.body.userId,'newImage':address+image+extn,'path':'./uploads/'};
          db.profilePicture(userInfo,function(result){
            if(result.message == 'image path added'){
              res.json({'success':'1','result':{'message':'Profile Picture Updated','imageUrl':address+image+extn},'error':'No Error'});
            }
          });
    }
    if(imageUploadDone == false){
    res.json({'success':'0','result':{},'error':'file format is not supported'});
  }
  });
});
Run Code Online (Sandbox Code Playgroud)

我尝试在onFileUploadStart和onFileUploadComplete等事件上验证用户.如果用户无效,文件仍会上传到路径.

小智 6

现在可以在1.0.0中实现.

如果要中止上传:

multer({
      fileFilter: function (req, file, cb) {
         if (path.extname(file.originalname) !== '.pdf') {
                 return cb(new Error('Only pdfs are allowed'))
          }

         cb(null, true)
       }
 })
Run Code Online (Sandbox Code Playgroud)

如果要跳过任何不是pdf的文件:

multer({
      fileFilter: function (req, file, cb) {
          if (path.extname(file.originalname) !== '.pdf') {
                  return cb(null, false)
       }

      cb(null, true)
      }
 })
Run Code Online (Sandbox Code Playgroud)

  • 根据文件扩展名进行验证并不是一个好习惯,用户可以轻松更改.Multer为每个不能伪造的文件提供`mimetype`.所以,我认为使用`file.mimetype`会更安全. (5认同)