如何在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
添加处理程序,则onFileUploadComplete
的file
对象具有truncated
属性。 如果此属性设置为true
,则表示特定文件超出了定义的最大文件大小限制。
编辑:它似乎虽然multer复制从busboy truncated
属性,它使用旧版本的busboy,还没有被truncated
属性。 关于更新依赖关系存在一个存在的问题 。 另一种方法是在超过最大大小时,将自己的属性添加到传递给onFileUploadData
的file
对象中。 这个属性应该在req.files.foo
对象上可用。
编辑2:它没有与multer或connect-multiparty( req.files
和req.body
)相同的“API”,但是我正在使用reformed ,它允许您定义validation规则和错误消息。 像m,,它使用引擎盖下的公文包。