最近项目需要实现Django 版本文件下载,对实现做以总结:
第一种:HttpResponse:
from django.shortcuts import HttpResponse
import urllib.parse
def DownLoadFile(request):
fileName="/home/CSV/测试.csv.gz"
file=open(fileName,'rb')
HttpResponse =HttpResponse(file)
HttpResponse['Content-Type']='application/x-gzip'
Disposition="attachment;filename=%s " % (urllib.parse.quote(fileName))
HttpResponse['Content-Disposition']=Disposition
return HttpResponse
第二种 StreamingHttpResponse:
from django.http import StreamingHttpResponse
import urllib.parse
def DownLoadFile(request):
fileName="/home/CSV/测试.csv.gz"
file=open(fileName,'rb')
HttpResponse=StreamingHttpResponse(file)
HttpResponse['Content-Type']='application/x-gzip'
Disposition="attachment;filename=%s " % (urllib.parse.quote(fileName))
HttpResponse['Content-Disposition']=Disposition
return HttpResponse
第三种 FileResponse:
from django.http import FileResponse
import urllib.parse
def DownLoadFile(request):
fileName="/home/CSV/测试.csv.gz"
file=open(fileName,'rb')
HttpResponse=FileResponse(file)
HttpResponse['Content-Type']='application/x-gzip'
Disposition="attachment;filename=%s " % (urllib.parse.quote(fileName))
HttpResponse['Content-Disposition']=Disposition
return HttpResponse
三种都可以实现文件的下载,根据需要而定,据说FileResponse中使用了缓存,更加节省资源,具体没有深入研究。
import urllib.parse
Disposition="attachment;filename=%s " % (urllib.parse.quote(fileName))
3个地方都对文件名做了这样的操作,因为涉及中文名称的时候不这样操作,下载下来文件名是有问题的。因此对文件名做了处理。
from django.utils.http import urlquote
HttpResponse['Content-Disposition'] = 'attachment;filename="%s"'%(urlquote(fileName))
这个也可以。