一、使用HttpResponse返回文件
在Django中,我们可以使用HttpResponse对象返回一个文件给用户下载。
from django.http import HttpResponse, FileResponse import os def download_file(request): file_path = os.path.join('/path/to/your/file/', 'your_file_name') 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
上述代码首先判断文件是否存在,如果存在则打开文件,将文件内容读取到HttpResponse对象中并设置Content-Disposition为inline。这样就能够在网页中直接浏览文件内容,或在浏览器中自动下载文件。
二、使用FileResponse返回文件
在Django2.x中,我们也可以使用FileResponse对象返回一个文件给用户下载。
from django.http import HttpResponse, FileResponse import os def download_file(request): file_path = os.path.join('/path/to/your/file/', 'your_file_name') if os.path.exists(file_path): response = FileResponse(open(file_path, 'rb')) response['Content-Type'] = 'application/octet-stream' response['Content-Disposition'] = 'attachment;filename="{0}"'.format(your_file_name) return response raise Http404
上述代码中,我们首先判断文件是否存在,如果存在则使用FileResponse打开文件,并设置Content-Type为application/octet-stream,Content-Disposition为attachment,这样浏览器就会提示用户下载文件。
三、使用django-sendfile返回文件
Django-sendfile是一个第三方库,可以通过它实现快速而安全地提供文件下载功能。
首先安装django-sendfile:
pip install django-sendfile
然后在项目的settings.py文件中配置:
INSTALLED_APPS = [ # ... 'django_sendfile', # ... ]
最后,可以使用django-sendfile来提供文件下载功能:
from django_sendfile import sendfile import os def download_file(request): file_path = os.path.join('/path/to/your/file/', 'your_file_name') if os.path.exists(file_path): return sendfile(request, file_path, attachment=True) raise Http404
上述代码中,我们首先判断文件是否存在,如果存在则使用sendfile方法返回文件,通过传递attachment=True参数来设置Content-Disposition为attachment,这样浏览器就会提示用户下载文件。