内存中创建的Zip文件已损坏

时间:2016-05-24 15:10:29

标签: javascript python angularjs flask zipfile

我正在尝试将一个zip文件(由Flask在内存中创建)提供给JS前端。下载的文件已损坏,我不明白我做错了什么。

uint8_t arr[]={0x6A};
  std::bitset<8> b; 
  bytesToBitset<1>(arr,b);
@app.route('/route')
def test_zip():
    zf = BytesIO()
    with zipfile.ZipFile(zf, 'w') as archive:
        archive.writestr("test.csv", "test, 2")
    zf.seek(0)
    return send_file(
        zf,
        attachment_filename='test.zip',
        mimetype='application/x-zip-compressed',
        as_attachment=True
    )

我得到的错误(在Mac OS X上)如下:

$http({
    url: settings.BACKEND_URL + "/route"
}).success(function (data) {
    var anchor = angular.element('<a/>');
    var blob = new Blob([data], {'type': 'application/zip'});
    anchor.attr({
         href: window.URL.createObjectURL(blob),
         target: '_blank',
         download: 'test.zip'
    })[0].click();
}) 

1 个答案:

答案 0 :(得分:1)

正如评论中指出的那样,Python部分工作正常。修复JS部分的解决方案是添加

responseType: 'arraybuffer'

在http请求的参数中。

参考:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data