在node.js中添加逻辑/validation到multer(快速)

在file upload期间,我想validation文件的大小,确保上传的文件是一个实际的图像,最后但并非最不重要的是validation标题已被写入图像。 但是这个代码不起作用。 我该怎么办?

var multer = require('multer'), upload = multer({ dest: 'uploads/', onFileUploadStart: function(file, req, res){ if(file.size > 1000000) { res.send("Maximum picture size is 1 MB"); return false; } if(req.body.postname === ''){ res.send("Enter a title name for your post"); return false; } if(file.mimetype !== 'image/png' && file.mimetype !== 'image/jpg' && file.mimetype !== 'image/jpeg'){ res.send("Supported image files are jpeg, jpg, and png"); return false; } } }); 

这是通过表单获取请求的path。

 router.post('/uploadpost', upload.single('image'), function(req, res){ fs.rename(req.file.path, req.file.destination + req.file.originalname, function(err){ if(err){ throw err; } }); var postObj = { Title : req.body.postname, Img_path : req.file.destination + req.file.originalname } var query = connection.query('INSERT INTO posts SET ?', postObj, function(err, result){ if(err){ throw err; } }); 

multer中间件一直有一个非常模糊的API文档,但经过一番挖掘,我发现它在幕后使用了Busboy ,并且它将pipe理limits选项对象给了Busboy

所以总结一下,没有onFileUploadStart选项,但是在你可以定义的options对象中有一个limits属性。 现在,如果我正确地理解了一切,你可以这样做:

 var multer = require('multer'); upload = multer({ dest: 'upload/', limits: { fileSize: 1000000 } }); 

如果您需要更多limits对象的configuration选项, Busboy的GitHub Repo上有文档可用

希望这可以帮助!