node.js - 我们可以在不完全上传的情况下限制上传文件大小吗?

标签 node.js express file-upload filesize multer

我正在使用 multer v1.3.0 和express v4.15.4。

我使用了如下所示的文件大小限制

multer({
    storage: storage,
    limits: {fileSize: 1*1000*50, files:1},
    fileFilter: function (req, file, cb) {
        if (_.indexOf(['image/jpeg', 'image/png'], file.mimetype) == -1)
            cb(null, false);
        else
            cb(null, true)
    }
});
  • 在这种情况下,我认为限制不起作用。因为没有得到任何 LIMIT_FILE_SIZE 错误。

  • 如果我删除 fileFilter,则会收到 LIMIT_FILE_SIZE 错误。

  • 但在这两种情况下,首先上传整个文件,然后检查文件大小。

上传一个 1GB 的文件,然后检查它是否是 1MB,这根本就不好。 所以我想知道是否有什么办法可以在文件大小超出限制时停止上传。我不想依赖内容长度。

最佳答案

从查看 multerbusboy 源代码来看,它会计算数据大小作为运行总计,并在达到 fileSize 后立即停止读取流。请参阅此处的代码:

https://github.com/mscdex/busboy/blob/8f6752507491c0c9b01198fca626a9fe6f578092/lib/types/multipart.js#L216

因此,虽然可以上传 1GB,但不应将其保存在任何地方。

如果您想停止继续上传,我认为您必须关闭套接字,尽管我自己还没有尝试过这一点。当请求仍在尝试上传数据时,我不知道有什么方法可以干净地响应。

相关:

YES or NO: Can a server send an HTTP response, while still uploading the file from the correlative HTTP request?

关于node.js - 我们可以在不完全上传的情况下限制上传文件大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46140918/

相关文章:

javascript - Node.js Promise 只返回预期内容的一小部分

php - Docker:容器之间无法通信

node.js - NodeJS,返回 res.json 是一种不好的做法吗

javascript - 类型错误 : Request path contains unescaped characters

javascript - 将动态值传递给 valums 上传中的其他参数

php - 无法以 codeigniter 形式上传文件

node.js - 使用 npm 安装 node.js 模块时出错

javascript - Express - 循环查询时 Promise 挂起

node.js - 使用 Node Fluent-ffmpeg 流式传输 mp4 视频

PHP图片上传功能,保存到一个目录,然后返回保存图片的url