用ExpressJS发送生成的zip文件

我在NodeJS服务器中使用express模块​​来生成zip文件。 快速服务器正在响应许多请求,所以我知道这是设置正确,但我无法生成一个zip文件,并发送回作为一个可下载的。

我不想保存文件,然后告诉Express发送该文件作为下载,我只想从存储器发送的zip文件作为数据。 这是我到目前为止。

function buildZipFile(data, filename) { var zip = new require('node-zip')(); zip.file(filename, data, { base64: false }); return zip.generate(); } var data = buildZipFile('hello world', 'hello.txt'); res.set('Content-Type', 'application/zip') res.set('Content-Disposition', 'attachment; filename=file.zip'); res.set('Content-Length', data.length); res.end(data, 'binary'); return; 

该文件将返回,但Windows解压缩或7zip都不能打开存档,就好像它是腐败的。 有什么build议么? 先谢谢你。

您需要将您的选项传递给zip.generate而不是zip.file 。 这将创build一个zip压缩文件,我可以通过zipinfo / unzip正确检查/解unzip

 var fs = require('fs'); var Zip = require('node-zip'); var zip = new Zip; zip.file('hello.txt', 'Hello, World!'); var options = {base64: false, compression:'DEFLATE'}; fs.writeFile('test1.zip', zip.generate(options), 'binary', function (error) { console.log('wrote test1.zip', error); });