通过压缩将HTTP发布多部分/表单数据流式传输并上传到存储中?

问题描述 投票:0回答:1

背景

我想减少服务的内存和临时存储占用空间,该服务占用文件,压缩文件并将其存储在某个地方。可以说,内存限制为4 GB,磁盘存储限制为512 MB,处理的文件可以为10 GB。

问题

  • 是否可以通过zlib(或其他位置)通过HTTP上传文件时流式传输文件?还是HTTP协议的限制,即在我可以访问数据之前必须完全上传文件?

  • 我在哪里可以了解更多?

http stream
1个回答
1
投票

“通过HTTP上载时是否可以流式传输文件?”

-是的。这就是multipart/form-data对文件上传的处理。实际上,根据RFC7578

媒体类型multipart / form-data遵循multipart MIME数据的模型streams

“或者是HTTP协议的限制,必须先完全上传文件,然后才能访问数据?”

-不。您可以在上载某些字节后立即访问数据,而无需等待上载完成。但是,我不熟悉zlib,并且不确定zlib是否可以使用部分文件字节。

您可以做一个小实验,以演示这种“上传时访问数据”的行为。这是一个简单的Node.js Web应用程序片段,但是您可以使用任何服务器端技术来实现此示例:

const Busboy = require('busboy');
router.post('/upload', function (req, res) {
  let busboy = new Busboy({headers: req.headers});
  busboy.on('file', function (fieldName, fileStream, fileName) {
    fileStream.on('data', function(data) {
      console.log(data);
    });
  })
})

[上传大文件并发送POST /upload请求后,您会看到:在浏览器的网络调试面板中HTTP请求仍处于挂起状态时,已经打印了已上传的字节:

enter image description here

((请注意,我使用“快速3G”限制来模拟慢速网络。)

© www.soinside.com 2019 - 2024. All rights reserved.