在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文件已下载,但无法打开。
答案 0 :(得分:0)
所以我终于弄清楚了。由于某种原因,仅通过常规的httpresponse的所有标准解决方案都不适用于我,但是此答案对我有效。为什么? Idk。但是确实如此。