Node.js 流式传输到 zip 存档并流式传输 zip 存档作为对客户端的响应

Cas*_*ynn 5 zip node.js node.js-stream

是否可以使用 Node.js 流构建 zip 存档并在创建该存档时通过对 HTTP GET 请求的响应将该 zip 存档提供给客户端/用户?我正在寻找一种解决方案,最好避免将整个 zip 缓冲到服务器上的内存中。

Pau*_*gel 1

Node.js 中的 ZIP 支持目前有点时髦:标准库支持 zlib 功能,但它们在文件级别工作(即您无法创建包含完整树结构的 ZIP 存档),某些模块只能解压缩数据,一些可以创建 ZIP 文件的文件是从浏览器库移植的,因此不支持流。

压缩完整目录的最佳选择是通过zip子进程使用二进制文件,并将其输出通过管道传输到 HTTP 响应:

var child = require('child_process');
var zipProcess = child.spawn('zip', ['-r', '-', 'directory_to_be_compressed']);
zipProcess.stdout.pipe(res);
Run Code Online (Sandbox Code Playgroud)

但是,如果您只需要压缩一个文件,则可以使用zlib 标准库

var gzip = zlib.createGzip();
var fs = require('fs');
var inp = fs.createReadStream('input.txt');    
inp.pipe(gzip).pipe(res);
Run Code Online (Sandbox Code Playgroud)