通过压缩将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请求仍处于挂起状态时,已经打印了已上传的字节:
((请注意,我使用“快速3G”限制来模拟慢速网络。)
以上是关于通过压缩将HTTP发布多部分/表单数据流式传输并上传到存储中?的主要内容,如果未能解决你的问题,请参考以下文章
使用 SharpZipLib 在 .net 中通过 http 流式传输 zip 文件
通过 HTTP (MPEG-DASH) 进行流式传输有啥意义?