gpt4 book ai didi

node.js - 使用 Express 和 node-archiver 即时生成 zip 存档

转载 作者:行者123 更新时间:2023-12-03 20:20:19 28 4
gpt4 key购买 nike

我正在尝试即时生成图标的 zip 存档,并通过 JSON POST 请求将响应流式传输给用户以进行下载。

zip 本身被创建并返回响应,但没有提示客户端下载文件,并且响应是乱码(我假设是存档的内容)。

app.post('/download', function(request, response) {

var icons = request.body;
var filename = 'icons.zip';

response.attachment(filename);

var zip = Archiver('zip');

zip.on('finish', function(error) {
return response.end();
});

zip.pipe(response);

for (var i = 0; i < icons.length; i++) {

var icon = getIcon(icons[i]);
zip.append(fs.createReadStream('public/' + icon.svg), { name: icon.title + '.svg' });
}

zip.finalize();
});

我想知道服务器端代码中是否缺少阻止客户端下载的任何内容,但从我遵循的示例( https://github.com/archiverjs/node-archiver/blob/master/examples/express.js )来看,情况似乎并非如此。

以下是发出的请求和收到的响应的一些屏幕截图:

Request and response headers

Response

最佳答案

AJAX 调用不会在浏览器中触发文件下载,因此您需要解决这个问题。

一种可能性是更改来自 POST 的请求。到 GET并将图标的名称作为参数放在 URL 中。

您的 Express 路线如下所示:

app.get('/download/*?', function(request, response) {
// Make sure icons names were provided:
if (! request.params[0]) {
return response.sendStatus(400);
}

// Split on `/`, which is used as separator between icon names:
var icons = request.params[0].split(/\//);

// The rest can be the same
...
});

客户端,你会使用这个:
location.href = 'http://your-server/download/Chevron%20Down/Close/Trash';

(显然,您也可以根据用户输入动态生成该 URL,只要您确保图标名称正确地进行了 URL 编码)

关于node.js - 使用 Express 和 node-archiver 即时生成 zip 存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32248015/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com