使用 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 向浏览器提供文件以供下载