gpt4 book ai didi

javascript - 如何使用 Multer 验证 Express 中文件上传的大小?

转载 作者:行者123 更新时间:2023-11-29 22:00:51 28 4
gpt4 key购买 nike

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

我知道您可以在实例化 Multer 时在选项对象中设置 limits:

app.use multer
limits:
fileSize: 1024 * 1024

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

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

最终,我的想法是,当请求被 Multer 解析并且上传的文件太大时,我想向用户显示一条快速消息并重定向到表单,这样她就可以尝试一个较小的文件。我的 Controller 的 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 文件夹的解析图像。因此,即使在此处检查文件大小也无法真正防止不必要的大文件上传。

一般情况下,使用 Multer 或其他表单解析中间件在 Express 中处理文件上传验证的最佳方式是什么?

最佳答案

要验证文件上传的大小,您只需使用 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

}

关于javascript - 如何使用 Multer 验证 Express 中文件上传的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23854868/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com