如何在Multer Express中validationfile upload的大小?

我使用Multer作为Express中的 multipart/form-data中间件。 我想知道如何validation上传的文件的大小,最好是他们正在上传。

我知道你可以在实例化Multer的时候在options对象中设置limits

 app.use multer limits: fileSize: 1024 * 1024 

但是,这只会截断上传的文件,不允许显示“文件太大”的错误消息。 当文件大小超过限制时。

我也检出了事件处理函数onFileUploadData(file, data) ,您可以在其中访问file对象和data缓冲区。 在这里,我可以通过检查data.length来检查当前的文件大小。 但是,我不清楚如何处理data.length大于我想允许的最大上传文件大小的情况。

最终,我的想法是,当Multerparsing请求并且上传的文件太大时,我想向用户显示一条Flash消息并redirect到表单,以便可以尝试更小的文件。 我的控制器的create行为看起来像这样:

 exports.create = (req, res) -> Record.create(req.body) .success (record) -> image = req.files.image uploadImage(image, record.id).then -> req.flash 'success', 'Record created.' res.redirect "/records/#{record.id}" .error (err) -> req.flash 'error', err res.redirect 'records/new' 

问题是, req.files.image已经是parsing的图像,此时上传到系统tmp文件夹。 所以即使在这里检查文件的大小也不会真的让我防止不必要的大file upload。

一般来说,使用Multer或其他表单parsing中间件来处理Express的file uploadvalidation的最好方法是什么?

如果为onFileUploadComplete添加处理程序,则onFileUploadCompletefile对象具有truncated属性。 如果此属性设置为true ,则表示特定文件超出了定义的最大文件大小限制。

编辑:它似乎虽然multer复制从busboy truncated属性,它使用旧版本的busboy,还没有被truncated属性。 关于更新依赖关系存在一个存在的问题 。 另一种方法是在超过最大大小时,将自己的属性添加到传递给onFileUploadDatafile对象中。 这个属性应该在req.files.foo对象上可用。

编辑2:它没有与multer或connect-multiparty( req.filesreq.body )相同的“API”,但是我正在使用reformed ,它允许您定义validation规则和错误消息。 像m,,它使用引擎盖下的公文包。