如何从服务器端下载 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 做出反应)的主要内容,如果未能解决你的问题,请参考以下文章

下载Ajax响应作为zip文件?

LAMP:如何从远程 URL/文件创建 .Zip 并将其即时流式传输到客户端

在Rest API中,需要构建ZIP并下载到客户端系统

C#mvc怎么从服务器上下载文件到客户端

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

如何将文件从 URL 下载到服务器文件夹