【发布时间】:2018-11-08 23:26:54
【问题描述】:
Angular 客户端代码:
$http.post('/zip', {
id: _id
})
.success(function (data, status, headers, config) {
var blob = new Blob([data], {type: "application/zip"});
var contentDisp = headers('content-disposition');
if (contentDisp && /^attachment/i.test(contentDisp)) {
var fileName = contentDisp.toLowerCase()
.split('filename=')[1]
.split(';')[0]
.replace(/"/g, '');
//The below command works but generates a corrupt zip file.
FileSaver.saveAs(blob, fileName);
}
})
.error(function () {
console.log("Could not download");
});
NodeJS 服务器代码:
app.route('/zip/')
.post(function(req, res) {
var output = fs.createWriteStream(join(outdir, outzipfile));
//Using s3zip to archive.
s3Zip
.archive({ s3: s3Client, bucket: bucket}, folder, s3_files)
.pipe(output);
output.on('close', function() {
//This sends back a zip file.
res.download(outPutDirectory + outputBcemFile);
});
output.on('error', function(err) {
console.log(err);
return res.status(500).json({error: "Internal Server Error"});
});
});
虽然 FileSaver.saveAs 可以运行并下载 zip 文件,但它似乎已损坏。 "application/zip" 类型是否正确?我也试过 "octet/stream" 并且它也下载了一个损坏的 zip 文件。任何帮助都将非常宝贵!谢谢。
【问题讨论】:
-
检查链接。它适用于简单的 xhr 请求,但由于奇怪的原因不能通过 angular http.post。我希望它不会破坏它。
-
尝试通过将 responseType 设置为 'arraybuffer' ex : responseType: 'arraybuffer'
-
让我试试。如果可行,您可以将其放在答案部分。
-
它工作的人。您可以将此信息放在答案部分,我可以将其标记为已接受。谢谢!
标签: angularjs node.js express blob