尝试将zip文件下载到Express中从服务器流式传输的客户端浏览器

时间:2018-12-06 04:16:40

标签: angular express stream zip

我正在使用一个名为s3-zip的工具,该工具在服务器端将来自S3的文件压缩在一起,然后使用Express框架将压缩文件流式传输到客户端。我可以确认服务器端的代码可以正常工作,如下所示

router.get('/download', function (req, res, next) {

    const region = 'us-west-2';
    const bucket = 'my-bucket';
    const folder = 'my-folder/';
    const file1 = '85570334.jpg';
    const file2 = '85570335.jpg';
    const file3 = '85571603.jpg';

    s3Zip
        .archive({ region: region, bucket: bucket}, folder, [file1, file2, file3])
        .pipe(res)
});

这是Chrome控制台上的响应外观

enter image description here

当我在客户端获得响应并尝试将其作为zip文件下载到客户端浏览器时,就会出现问题。我正在使用Angular File Saver来做到这一点。以下代码段是我尝试获取与上图相对应的响应并将其下载到客户端浏览器的地方。

var blob = new Blob([res._body], {type: "application/zip"});
FileSaver.saveAs(blob, "test-new.zip");

确实下载了一个zip文件,但是当我尝试在Mac上打开它时,出现以下错误

enter image description here

谁能看到导致此错误的原因以及解决方法?

1 个答案:

答案 0 :(得分:0)

啊,看来这是与请求本身有关的问题,我没有在问题中显示。我添加了objstr = `{"20181218-20181228":{"currencyCode":"USD", "totalPrice":469.4, "formattedPrice":"$469", "cheapest":false}, "20181218-20181226":{"currencyCode":"USD", "totalPrice":469.4, "formattedPrice":"$469", "cheapest":false}}`; //replace, remove last , ,,, Put {} in start and end ,,,, obj = JSON.parse(objstr); console.log(obj); ,之后似乎可以使用