如何将zip文件从服务器端下载到客户端(Django做出反应)

时间:2019-04-10 14:44:39

标签: javascript python django reactjs zip

在django服务器端,我有一个文件,可以从s3下载一些文件,然后将它们压缩在一起。然后,我想将该zip文件发送到客户端,然后在客户端下载。但是,无论何时我尝试在客户端打开zip文件,我都会得到一个An error occurred while loading the archive

我在具有Django后端和React前端的Ubuntu 14.04上运行。我尝试将文件作为tar文件传递,但这也不起作用。我还尝试了许多将zip文件传递到HTResponse的方法,但是我总是遇到相同的错误。现在,要使其正常工作,我只是想下载一个在本地计算机上下载的zip文件。

我尝试了很多不同的content_type,从application / zip到octet / stream并强制下载。

django后端

zip_path = '/home/konstantin/Downloads/sup.zip'
        content_path = mime.guess_type(zip_path)

        with open(zip_path, 'rb') as zip_file:

            response = HttpResponse(zip_file, content_type='application/zip')
            response['Content-Length'] = str(os.stat(zip_path).st_size)

            response['Content-Disposition'] = 'attachment; filename={}'.format('willthiswork.zip')
            return response

反应前端(我们有一个将python更改为js的程序)。 Ajax调用的响应直接传递到此方法。

def download(self,url):
        data = __new__(Blob([url], {"type": "octet/stream"}))
        csvURL = window.URL.createObjectURL(data)
        tempLink = document.createElement('a')
        tempLink.href = csvURL
        tempLink.download = 'willthiswork.zip'
        tempLink.click()

预期结果:Zip文件在客户端下载并且可以打开 实际结果:Zip文件已下载,但无法打开。

1 个答案:

答案 0 :(得分:0)

所以我终于弄清楚了。由于某种原因,仅通过常规的httpresponse的所有标准解决方案都不适用于我,但是此答案对我有效。为什么? Idk。但是确实如此。

https://stackoverflow.com/a/29939024/11312013