使用 Django 提供文件以供下载

Posted

技术标签:

【中文标题】使用 Django 提供文件以供下载【英文标题】:Serve a file for download with Django 【发布时间】:2017-10-09 01:06:05 【问题描述】:

我正在尝试在我的 django 应用程序中提供下载文件,经过一番研究后,我编写了下面的代码,但有一个问题,文件是在浏览器中打开而不是下载。

我在我的应用程序上提供的文件是 exe,当它们打开时它只是一堆随机字符。

那么我如何指定我希望下载文件而不是打开文件? 谢谢

with open(path_to_apk, 'rb') as fh:
     response = HttpResponse(fh)
     response['Content-Disposition'] = 'inline; filename=' + os.path.basename(path_to_apk)
     return response`

【问题讨论】:

Generating file to download with Django的可能重复 【参考方案1】:

您想将 Content-disposition 标头设置为“附件”(并设置正确的内容类型 - 从 var 名称中我假设这些文件是 android 包,否则替换为正确的内容类型):

response = HttpResponse(fh, content_type="application/vnd.android.package-archive") 
response["Content-disposition"] = "attachment; filename=".format(os.path.basename(path_to_apk))
return response

【讨论】:

谢谢,这似乎有效,代码上存在拼写错误:您编写的格式不是 fomat,也许您可​​以为可能想要使用您的解决方案的其他人更正它。【参考方案2】:

首先,您必须将Content_Disposition 标头设置为attachment

不要担心Content_Type 标头的正确值,而是使用FileResponse 而不是 HttpResponse

file=open(path_to_apk,"rb")
response=FileResponse(file)
response['Content-Disposition'] = 'attachment; filename='.format(os.path.basename(path_to_apk))
return response

【讨论】:

以上是关于使用 Django 提供文件以供下载的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Play Framework 向浏览器提供文件以供下载

phpmyadmin 提供文件以供下载 [关闭]

Django:单击按钮时如何将所有文件下载为zip?

使用 .Net 对 zip 文件进行数字签名以供下载的最佳方式是啥

如何设置环境变量以供 .npmrc 使用

在 Django 中提供大文件(高负载)