dsc*_*ger 4 javascript file-upload node.js coffeescript express
我在Express中使用Multer作为multipart/form-data中间件。我想知道如何验证上传文件的大小,最好是在上传文件时验证。
我知道您可以limits在实例化 Multer 时在选项对象中进行设置,如下所示:
app.use multer
limits:
fileSize: 1024 * 1024
Run Code Online (Sandbox Code Playgroud)
但是,这只会截断上传的文件,并且不允许显示“文件太大”之类的错误消息。当文件大小超过限制时。
我还检查了onFileUploadData(file, data)您可以访问file对象和data缓冲区的事件处理程序。在这里我可以通过检查来检查当前文件大小data.length。不过,我不清楚如何处理大于data.length我允许的最大上传文件大小的情况。
最终,我的想法是,当 Multer 解析请求并且上传的文件太大时,我想向用户显示一条闪存消息并重定向到表单,以便她可以尝试较小的文件。我的控制器的动作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'
Run Code Online (Sandbox Code Playgroud)
问题是req.files.image此时已经上传到系统 tmp 文件夹的已解析图像。因此,即使在这里检查文件大小也无法真正让我防止不需要的大文件上传。
一般来说,使用 Multer 或其他表单解析中间件在 Express 中处理文件上传验证的最佳方法是什么?
小智 5
要验证文件上传的大小,您只需使用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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11096 次 |
| 最近记录: |