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

时间:2014-03-17 19:25:38

标签: node.js zip node.js-stream

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

2 个答案:

答案 0 :(得分: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);

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

var gzip = zlib.createGzip();
var fs = require('fs');
var inp = fs.createReadStream('input.txt');    
inp.pipe(gzip).pipe(res);

答案 1 :(得分:0)

这不是Node,但这个项目完全符合您的要求。您可以将其作为独立服务器托管,并从Node调用它:

https://github.com/scosman/zipstreamer