如何使用Multer验证Express中上传的文件大小
How to validate size of file uploads in Express with Multer?
我在Express中使用Multer作为multipart/form-data
中间件。我想知道如何验证上传文件的大小,最好是在他们被上传的时候。
我知道您可以在实例化Multer时在options对象中设置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或其他表单解析中间件处理文件上传验证的最佳方法是什么?
要验证文件上传的大小,只需使用req.file.buffer
下面的代码只是一个示例。
// Set your file size limit
const maxSize = 1 * 1024 * 1024; // for 1MB
// validate file size
if (req.file.buffer.byteLength >= maxSize) {
// write code here
} else {
// write code here
}
如果您为onFileUploadComplete
添加处理程序,则传递具有truncated
属性的file
对象。如果此属性设置为true
,则表示该特定文件超过了定义的最大文件大小限制。
编辑:似乎虽然从busboy的truncated
属性的多个副本,它正在使用一个旧版本的busboy,还没有truncated
属性。关于更新依赖项存在一个问题。另一种方法是在超过最大大小时将自己的属性附加到传递给onFileUploadData
的file
对象上。这个属性应该在req.files.foo
对象上可用。
编辑2:它没有相同的"API"作为multer或连接多方(req.files
和req.body
),但我正在努力改革,允许您定义验证规则和错误消息。和multer一样,它使用了busboy under the hood
- 预编译的车把模板使文件大小加倍
- Node.js:在修改时确定文件大小
- 使用ajax获取通过FTP上传的文件的文件大小——试图防止ajax中断自身
- 从多个文件上传中检索文件大小
- 文件大小的进度指示器
- Dropzone最大文件大小超过事件
- expressjs文件上传,检查是否确实有文件发送,指定最大文件大小&保留它的名字
- 可以使用Plupload调整文件大小以获得更多大小
- toDataURL()文件大小增加
- Javascript人类可读文件大小
- 是否有一种方法可以限制要上传到客户端服务器的文件大小
- SJCL加密导致文件大小错误
- 减少请求的文件大小或减少浏览器计算次数
- 上传前请检查文件大小
- Jquery文件大小验证无效
- 如何在javascript上传前检查文件大小
- MVC 文件上传文件大小客户端验证
- WinJS图片文件大小
- 反应.js应用程序.js文件大小
- 如何使用Multer验证Express中上传的文件大小