使用ExpressJS发送生成的zip文件

Jam*_*mes 7 attachment zipfile node.js express

我正在使用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;
Run Code Online (Sandbox Code Playgroud)

该文件将返回,但windows unzip或7zip都无法打开存档,就好像它已损坏一样.有什么建议?先感谢您.

Pet*_*ons 9

您需要将选项传递给zip.generatezip.file.这会创建一个zip存档,我可以通过zipinfo/ 正确检查/解压缩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);
});
Run Code Online (Sandbox Code Playgroud)

  • 注意2018:`node-zip`似乎不再活跃,并且是`JSZip`周围的一个非常薄的包装器。只需直接使用JSZip,因为它更加活跃。 (2认同)