我想减少服务的内存和临时存储占用空间,该服务用于获取文件,压缩文件并将其存储在某个地方。可以说,内存限制为4 GB,磁盘存储限制为512 MB,处理的文件可以为10 GB。
在通过HTTP通过zlib(或其他位置)上传文件时,是否可以流式传输文件?还是HTTP协议的限制,即在我可以访问数据之前必须完全上传文件?
我在哪里可以了解到更多信息?
答案 0 :(得分:1)
“通过HTTP上载时是否可以流式传输文件?”
-是的。这就是multipart/form-data
处理文件上传的过程。实际上,根据RFC7578:
媒体类型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”限制来模拟慢速网络。)