node.js - 使用 ExpressJS 发送生成的 zip 文件

标签 node.js express attachment zip

我在 NodeJS 服务器中使用 express 模块生成一个 zip 文件。 Express 服务器正在响应许多请求,所以我知道它设置正确,但我在生成 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 unzip 或 7zip 都无法打开存档,就好像它已损坏一样。有什么建议么?提前谢谢你。

最佳答案

您需要将您的选项传递给 zip.generate 而不是 zip.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);
});

关于node.js - 使用 ExpressJS 发送生成的 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18346370/

相关文章:

iphone - iPhone MFMailComposeViewController 报告错误。安全吗?

iOS:如何在已经显示邮件撰写 View 时在后台创建/准备自定义电子邮件附件?

node.js - 为什么 pm2 会自动删除进程?

express - Next.js-Passport 登录成功后如何获取用户数据?【客户端路由】

node.js - 如何确定对象是否存在 AWS S3 Node.JS sdk

node.js - ExpressJS : normalizePort function is really necessary?

mysql - 无法在我的实时服务器上维护数据库连接,但在本地工作正常。 Node.js + mysql

php - 在 PHPMailer 中添加多个附件

javascript - 如何向可以访问其变量的javascript对象添加函数

node.js - npm 从本地文件夹安装包