方法一: 使用HttpResonse 下面方法从url获取file_path, 打开文件,读取文件,然后通过HttpResponse方法输出。 import osfrom django.http import HttpResponsedef file_download(request, file_path): # do something... with open(file_path) as f: c = f.r
方法一: 使用HttpResonse 下面方法从url获取file_path, 打开文件,读取文件,然后通过HttpResponse方法输出。
然而该方法有个问题,如果文件是个二进制文件,HttpResponse输出的将会是乱码。对于一些二进制文件(图片,pdf),我们更希望其直接作为附件下载。当文件下载到本机后,用户就可以用自己喜欢的程序(如Adobe)打开阅读文件了。这时我们可以对上述方法做出如下改进, 给response设置content_type和Content_Disposition。
HttpResponse有个很大的弊端,其工作原理是先读取文件,载入内存,然后再输出。如果下载文件很大,该方法会占用很多内存。对于下载大文件,Django更推荐StreamingHttpResponse和FileResponse方法,这两个方法将下载文件分批(Chunks)写入用户本地磁盘,先不将它们载入服务器内存。 方法二: 使用SteamingHttpResonse
方法三: 使用FileResonse FileResponse方法是SteamingHttpResponse的子类,是小编我推荐的文件下载方法。如果我们给file_response_download加上@login_required装饰器,那么我们就可以实现用户需要先登录才能下载某些文件的功能了。
|
2019-06-18
2019-07-04
2021-05-23
2021-05-27
2021-05-27