允许用户从Django视图下载ZIP

时间:2016-08-11 16:19:14

标签: python-3.x django-1.9

我的主要任务是让用户按下“下载”按钮并从查询目录下载文件“A.zip”。

我有一个elif request.POST .....的原因是因为我有另一个条件检查是否按下了“执行”按钮。此执行按钮运行脚本。两个POST操作都有效,dir_file是C:\ Data \ Folder。

我关注并阅读了许多关于如何从Django下载文件的教程和响应,我无法弄清楚为什么我的简单代码不会下载文件。

我错过了什么?代码不会返回任何错误。有没有人有任何文件可以解释我做错了什么?

我期待自动下载文件,但不会发生。

elif request.POST['action'] == 'Download': 
    query = request.POST['q']
    dir_file = query + "A.zip"
    zip_file =  open(dir_file, 'rb')

    response = HttpResponse(zip_file, content_type='application/zip')
    response['Content-Disposition'] = 'attachment; filename=%s' % 'foo_zip'

    zip_file.close()

1 个答案:

答案 0 :(得分:0)

我找到了答案。

在阅读了很多关于此的文档之后,我忽略了此功能最重要的方面,即 url

基本上,函数download_zip由POST调用并运行下载zip的脚本。

这是我最终做的事情:

    elif request.POST['action'] == 'Download': 
        return(HttpResponseRedirect('/App/download'))

创建了一个视图:

def download_zip(request):
    zip_path = root + "A.zip"
    zip_file =  open(zip_path, 'rb')
    response = HttpResponse(zip_file, content_type='application/zip')
    response['Content-Disposition'] = 'attachment; filename=%s' % 'A.zip'
    response['Content-Length'] = os.path.getsize(zip_path)
    zip_file.close()

    return response

最后在urls.py中:

url(r'^download/$', views.download_zip, name='download_zip'),