【发布时间】:2014-07-14 07:50:35
【问题描述】:
我在Express 中使用Multer 作为multipart/form-data 中间件。我想知道如何验证上传文件的大小,最好是在上传文件时验证。
我知道您可以在实例化 Multer 时在选项对象中设置 limits,如下所示:
app.use multer
limits:
fileSize: 1024 * 1024
但是,这只会截断上传的文件,并且不允许显示“文件太大”之类的错误消息。当文件大小超过限制时。
我还检查了事件处理程序onFileUploadData(file, data),您可以在其中访问file 对象和data 缓冲区。在这里,我可以通过检查data.length 来检查当前文件大小。不过,我不清楚如何处理data.length 大于我想要允许的最大上传文件大小的情况。
最终,我的想法是,当 Multer 解析请求并且上传的文件太大时,我想向用户显示一条 Flash 消息并重定向到表单,以便她可以尝试使用较小的文件。我的控制器的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已经是解析后的图像,此时已上传到系统tmp文件夹。因此,即使在此处检查文件大小,我也无法真正防止不必要的大文件上传。
在 Express 中使用 Multer 或其他表单解析中间件处理文件上传验证的最佳方法是什么?
【问题讨论】:
标签: javascript node.js file-upload express coffeescript