如何在python中的httpresponse附件中发送zip文件

时间:2018-07-18 06:21:00

标签: python django

我正在发出一个jquery ajax POST请求,并将数据传递给Django框架中的后端python代码。我需要将zip文件作为httpresponse返回,应该在浏览器中自动下载。

             object_body = request.body.decode('utf-8')
             loaded_json = json.loads(object_body)

             json_obj = ast.literal_eval(str(loaded_json))

             zip_file_path = importexport.download(json_obj,user)
             zip_filename = os.path.basename(zip_file_path)

             with open(zip_file_path, 'rb') as zip:
               response = HttpResponse(zip.read(), content_type = 'application/x-zip')
               response['Content-Disposition'] = 'attachment; filename=' + zip_filename

             return response

3 个答案:

答案 0 :(得分:0)

一种解决方案:

将zip文件放入MEDIA_ROOT,然后重定向到其网址。

答案 1 :(得分:0)

如果您具有下载URL(将文件放入MEDIA_ROOT),则只需编写具有a属性的download标记,然后按以下代码片段所述单击“下载”,它将自动下载文件无需重定向。

<a href="https://github.com/vaibhavmule/vaibhavmule.github.io/archive/master.zip" download>Download</a>

答案 2 :(得分:0)

您不想使用 .read() ,只需使用filestream,请尝试这样的操作

def report_generate(request):
    filename = "mysample.zip"
    f = open(filename, "rb")
    response = HttpResponse(f, content_type='application/x-zip')
    response['Content-Disposition'] = 'attachment; filename="%s"' % filename
    return response