如何从服务器端下载 zip 文件到客户端(django 做出反应)
Posted
技术标签:
【中文标题】如何从服务器端下载 zip 文件到客户端(django 做出反应)【英文标题】:How to download zip file from server side to client side (django to react) 【发布时间】:2019-09-01 01:59:12 【问题描述】:在我的 django 服务器端,我有一个文件,它从 s3 下载一些文件,然后将它们压缩在一起。然后我想将该 zip 文件发送到客户端并在客户端下载。但是,当我尝试在客户端打开 zip 文件时,我会收到 An error occurred while loading the archive
我在带有 django 后端和 react 前端的 Ubuntu 14.04 上运行。我尝试将文件作为 tar 文件传递,但这也不起作用。我还尝试了许多不同的方法将 zip 文件传递给 HTResponse,但我总是遇到同样的错误。现在为了让它工作,我只是想下载一个我在本地计算机上下载的 zip 文件。
我尝试了很多不同的 content_types,从 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
react 前端(我们有一个将 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】:所以我终于弄明白了。出于某种原因,仅通过常规 httpresponse 的所有标准解决方案都对我不起作用,但这个答案对我有用。为什么?同上。但确实如此。
https://***.com/a/29939024/11312013
【讨论】:
以上是关于如何从服务器端下载 zip 文件到客户端(django 做出反应)的主要内容,如果未能解决你的问题,请参考以下文章
LAMP:如何从远程 URL/文件创建 .Zip 并将其即时流式传输到客户端