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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过压缩将HTTP发布多部分/表单数据流式传输并上传到存储中?相关的知识,希望对你有一定的参考价值。

背景

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

问题

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

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

答案

“通过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”限制来模拟慢速网络。)

以上是关于通过压缩将HTTP发布多部分/表单数据流式传输并上传到存储中?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SharpZipLib 在 .net 中通过 http 流式传输 zip 文件

通过 HTTP (MPEG-DASH) 进行流式传输有啥意义?

使用 HTTP Post 从客户端流式传输数据

Hadoop - 将来自 HTTP 上传 (PUT) 的数据直接流式传输到 HDFS

将通过 HTTP 流式传输的 wav 实时转换为 mp3

将数据流式传输到 bigquery 仅返回部分数据