Python 使用Django下载一个文件
这可能是一个简单的问题,但不知何故,我找不到解决办法。Django提供了很多关于上传文件的信息,但我如何下载文件呢 让我们假设我们在HTML上有一个按钮,它作为一个文件上传/something.txt 我试过使用Python 使用Django下载一个文件,python,django,Python,Django,这可能是一个简单的问题,但不知何故,我找不到解决办法。Django提供了很多关于上传文件的信息,但我如何下载文件呢 让我们假设我们在HTML上有一个按钮,它作为一个文件上传/something.txt 我试过使用django.views.static.service,但是这样做会在网页上打开一个文件 我的问题很简单:我们网站的用户下载文件的最佳方式是什么? 你需要读那个文件 使用HttpResponse和适当的内容类型提供服务 下面是一些示例代码: content = open("upload
django.views.static.service
,但是这样做会在网页上打开一个文件
我的问题很简单:我们网站的用户下载文件的最佳方式是什么?- 你需要读那个文件李>
- 使用
和适当的内容类型提供服务李>HttpResponse
content = open("uploads/something.txt").read()
return HttpResponse(content, content_type='text/plain')
这应该是一个文本文件
但正如您所描述的,在某些浏览器上,它不会要求下载文件,而是在浏览器中显示文件。如果要显示下载提示,请使用以下命令:
response = HttpResponse(open("uploads/something.txt", 'rb').read())
response['Content-Type'] = 'text/plain'
response['Content-Disposition'] = 'attachment; filename=DownloadedText.txt'
return response
但是,请注意,通过nginx或您选择的反向代理提供静态内容或上传文件可能是一个更好的主意。通过Django发送大文件可能不是最好的方法 可能有点晚,但我的解决方案是:
import os
from django.conf import settings
from django.http import HttpResponse, Http404
def download(request, path):
file_path = os.path.join(settings.MEDIA_ROOT, path)
if os.path.exists(file_path):
with open(file_path, 'rb') as fh:
response = HttpResponse(fh.read(), content_type="application/vnd.ms-excel")
response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path)
return response
raise Http404
def render(self, value):
return format_html('<a href="/media/{0}" download>{0}</a>', value)
def渲染(自身,值):
返回格式\u html(“”,值)