【发布时间】:2015-08-27 11:20:17
【问题描述】:
我正在尝试通过 JSON POST 请求即时生成图标的 zip 存档并将响应流式传输给用户以供下载。
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) 来看,情况似乎并非如此.
以下是请求和收到的响应的一些屏幕截图:
【问题讨论】:
-
如何在客户端发布数据?鉴于它是 JSON,我怀疑是通过 AJAX 调用?在这种情况下:AJAX 不进行下载。
-
没错,我是通过AJAX发送JSON请求的!有没有我可以使用的替代品?
-
最后需要让客户端导航到下载地址。您可以通过在查询字符串(或作为路由参数)中传递图标名称将其从
POST转换为GET,或者动态创建并提交<form>客户端。