在服务器上创建的普通zip文件,在客户端中收到损坏的zip文件

时间:2018-01-25 16:48:32

标签: javascript python zipfile jszip

我有一个Vue.js应用尝试从Flask服务器请求zip文件。但是,当我从服务器收到有效负载并尝试打开它时,我正在使用的包(JSZip)告诉我zip文件已损坏。如果我通过浏览器请求URL,则zip文件下载没有问题。我认为它可能与zip文件的生成方式有关,但我不确定。为什么文件在客户端会被破坏?

客户端Javascript代码:

const jszip = require('./jszip.min.js');
...more code...

this.filesystem.REST.get('http://localhost:3000').then(function(result){
    var zip = new jszip();
    zip.loadAsync(result.data).then(function(contents) {
         // Execution does not reach this point
         // Fails with corruption error before the then() call
    })

})

服务器Python代码:

@app.route('/')
def home():
    playerFp = os.path.join(seriesMap[seriesid], playerid)
    fileList = os.listdir(playerFp)
    bytesIo = io.BytesIO()
    zf = zipfile.ZipFile(bytesIo, mode="w")
    for file in fileList:
        if '.jpg' in file or '.xml' in file:
            absFp =os.path.join(playerFp, file)
            if '.xml' in file:
                stats = getJsonFormat(absFp)
                jsonfile = file.replace('.xml', '.json')
                zf.writestr(jsonfile, stats)
            else:
                zf.write(absFp, os.path.relpath(absFp, playerFp))
    zf.close()  


    bytesIo.seek(0)

    return send_file(bytesIo,  attachment_filename=playerid+'.zip', as_attachment=False)

这是我在控制台中遇到的错误:

enter image description here

1 个答案:

答案 0 :(得分:0)

客户端上的脚本有问题。您需要使用以下命令定义zip文件:

var zip = new JSZip()

而不是:

var zip = new jszip()