【问题标题】:Corrupt zip file downloaded in angular以角度下载的损坏的zip文件
【发布时间】: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 文件。任何帮助都将非常宝贵!谢谢。

【问题讨论】:

  • 斯里尼你检查了吗:github.com/eligrey/FileSaver.js/issues/156
  • 检查链接。它适用于简单的 xhr 请求,但由于奇怪的原因不能通过 angular http.post。我希望它不会破坏它。
  • 尝试通过将 responseType 设置为 'arraybuffer' ex : responseType: 'arraybuffer'
  • 让我试试。如果可行,您可以将其放在答案部分。
  • 它工作的人。您可以将此信息放在答案部分,我可以将其标记为已接受。谢谢!

标签: angularjs node.js express blob


【解决方案1】:

这是下面链接中 Git 中提到的一个错误:

https://github.com/eligrey/FileSaver.js/issues/156

要解决此问题,您需要在 $http 请求标头中添加:responseType: 'arraybuffer' 即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多