在上载时,通过压缩将HTTP post多部分/表单数据流式传输到存储器中? 背景

在上载时,通过压缩将HTTP post多部分/表单数据流式传输到存储器中? 背景,http,stream,zlib,Http,Stream,Zlib,我想减少一个服务的内存和临时存储空间,该服务接收文件,将其压缩并存储在某处。假设内存限制为4 GB,磁盘存储限制为512 MB,处理的文件可以是10 GB 问题: 在通过HTTP上传文件时,是否可以通过zlib(或其他地方)对文件进行流式传输?或者,在我访问数据之前,必须完全上传文件,这是HTTP协议的限制吗 我在哪里可以读到更多关于这方面的信息 “通过HTTP上传文件时,是否可以流式传输文件?” --对。这就是multipart/form data对文件上传的作用。实际上,根据: 媒体类

我想减少一个服务的内存和临时存储空间,该服务接收文件,将其压缩并存储在某处。假设内存限制为4 GB,磁盘存储限制为512 MB,处理的文件可以是10 GB

问题:
  • 在通过HTTP上传文件时,是否可以通过zlib(或其他地方)对文件进行流式传输?或者,在我访问数据之前,必须完全上传文件,这是HTTP协议的限制吗

  • 我在哪里可以读到更多关于这方面的信息

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

--对。这就是
multipart/form data
对文件上传的作用。实际上,根据:

媒体类型多部分/表单数据遵循多部分MIME数据流的模型

“或者,在我访问数据之前,必须完全上载文件,这是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请求仍处于挂起状态,但已打印上载的字节:

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