码迷,mamicode.com
首页 > 其他好文 > 详细

Django_文件下载

时间:2019-12-25 13:25:08      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:png   form   image   import   content   crm   需要   follow   chunk   

 

一、小文件下载

1、视图 views.py

三种方式实现,任选其一

(1)使用HttpResponse

# 导入模块
from
django.shortcuts import HttpResponse def download(request):   file = open(crm/models.py, rb)   response = HttpResponse(file)   response[Content-Type] = application/octet-stream #设置头信息,告诉浏览器这是个文件   response[Content-Disposition] = attachment;filename="models.py"   return response

(2)使用StreamingHttpResponse

from django.http import StreamingHttpResponse
def download(request):
  file
=open(crm/models.py,rb)   response =StreamingHttpResponse(file)   response[Content-Type]=application/octet-stream   response[Content-Disposition]=attachment;filename="models.py"   return response

(3)使用FileResponse

from django.http import FileResponse
def download(request):
    file=open(crm/models.py,rb)
    response =FileResponse(file)
    response[Content-Type]=application/octet-stream
    response[Content-Disposition]=attachment;filename="models.py"
    return response

 

2、添加路由 urls.py

配置一个下载的路径

url(r^download/,views.download,name="download"),

 

3、模板 templates 的修改

配置一个 a 标签,跳转地址配置要跳转的下载路径(对应的视图)

<div class="col-md-4"><a href="{% url ‘download‘ %}" rel="external nofollow" >点我下载</a></div>

 

二、大文件下载

大文件需要使用迭代器优化

只需要修改 views.py 文件

from django.http import StreamingHttpResponse

def download(request):
  def file_iterator(file_name, chunk_size=512):
     with open(file_name, rb) as f:
        while True:
           c = f.read(chunk_size)
              if c:
                 yield c
               else:
                  break
   the_file_name = static/images/exam/logo.png
   response = StreamingHttpResponse(file_iterator(the_file_name))
   response[Content-Type] = application/octet-stream
   response[Content-Disposition] = attachment;filename="{0}".format(the_file_name)
   return response

 

 

 

Django_文件下载

标签:png   form   image   import   content   crm   需要   follow   chunk   

原文地址:https://www.cnblogs.com/yebaofang/p/12095959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!