首页 > 其他分享 >django中几种下载文件的方法

django中几种下载文件的方法

时间:2023-11-02 19:36:08浏览次数:32  
标签:file 几种 io HttpResponse django response 下载 name

在django中有多种方式可以让前端下载一个文件,比如excel的文件。这里记录下几种实现的方式。

一. 直接在django项目中有一个现成的excel文件且其中内容都有

1.使用django中的HttpResponse类

(1).使用open()打开二进制方式

from django.http import HttpResponse
path = "a.xlsx"
f = open(path,"rb")
response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = f'attachment; filename="{escape_uri_path(self.__template_name)}"'
response['Access-Control-Expose-Headers'] = 'content-disposition'
response.write(f.read())
f.close()
return response

(2). 使用io.BytesIO() 

import io
from  django.http import HttpResponse

path = "a.xlsx"
f =open(path,"rb")
response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = f'attachment; filename="{escape_uri_path(self.__template_name)}"'
response['Access-Control-Expose-Headers'] = 'content-disposition'
io_obj = io.BytesIO(f.read())
response.write(io_obj.getvalue())
f.close()
return respons

注意:使用io.BytesIO效率会更高。

2.使用django中的FileResponse类

from django.http import FileResponse
f = open(path_, 'rb')
response = FileResponse(f)
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment; filename="%s"' % (urlquote(filename))
response['Access-Control-Expose-Headers'] = 'content-disposition'
f.close()
return response

3.使用django中的StreamingHttpResponse类

def file_iterator(file_name, chunk_size=512):
        with open(file_name) as f:
            while True:
                c = f.read(chunk_size)
                if c:
                    yield c
                else:
                    break

    the_file_name = "big_file.pdf"
    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项目中没有现成的excel

这里只举例使用openpyxl来创建excel。

from django.http import HttpResponse
import io
from openpyxl import Workbook

# 创建一个工作簿并向其中添加一些数据
workbook = Workbook()
sheet = workbook.active
sheet['A1'] = 'Hello'
sheet['B1'] = 'World'

# 将工作簿保存到 BytesIO 对象
buffer = io.BytesIO()
workbook.save(buffer)

# 将文件指针重置到开头
buffer.seek(0)

# 创建 HTTP 响应
response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = 'attachment; filename="example.xlsx"'

# 将 BytesIO 对象中的数据作为响应内容发送
response.write(buffer.getvalue())

# 返回响应
return response

当然,上述中的HttpResponse也可以是FileResponse, StreamingHttpResponse

 

标签:file,几种,io,HttpResponse,django,response,下载,name
From: https://www.cnblogs.com/shaoyishi/p/17806104.html

相关文章

  • 软件项目开发全套文档下载
    一、前言:软件开发常见文档有哪些?需求分析说明书:这是描述软件功能需求的文档,包括产品概述、主要概念、操作流程、功能列表和解说、注意事项、系统环境等内容。它是由项目经理对客户相关部门进行业务调研后编写,并作为后续软件开发和测试的依据。数据库设计说明书:根据《需求分析......
  • 如何下载学习强国平台视频
    1在学习强国平台上找到自己喜欢的视频,点击右小角分享给微信好友“文件传输助手”(图1),随后打开分享的链接,复制视频网址(图2);图1图202将复制的网址到搜狗浏览器中打开,选择浏览器中的右上角“三”菜单,依次选择更多工具——开发者工具(F12)或者直接按键盘上的F12键;图303点击“Ne......
  • Rhino(犀牛) 7.4 下载及安装教程
    本文所提供的安装教程均来自互联网,仅供大家学习使用,不可用于商业用途,否则本作者不负责,如本文提供的信息涉及侵权,请联系作者删除,谢谢大家配合。 软件介绍:Rhino7.4是一款3D建模软件,由美国公司McNeel&Associates开发。它是一款功能强大的CAD工具,可以用于产品设计、建筑设计、工业......
  • 下载文件
    publicvoiddownload(){ try{ //得到文章的名称 Stringfilename="cc.zip"; //设置文件MIME类型 this.getResponse().setContentType("application/octet-stream"); ......
  • api-ms-win-core-path-l1-1-0.dll下载(win7-32位)
      下载 api-ms-win-core-path-l1-1-0.dll 后拷贝到文件夹:32位系统 c:\windows\system32  下载链接: https://www.dll-files.com/api-ms-win-core-path-l1-1-0.dll.html ......
  • 2021年github文件高速下载方法
     https://shrill-pond-3e81.hunsh.workers.dev/  ......
  • django搭建平台实战教程三:接口编写及权限校验(前后端分离)
    自定义权限校验注册增加group_id字段...@api_view(['POST'])defregister(request:Request):ifDUser.objects.filter(username=request.data["username"]).count()>0:returnResponse({"code":400,&qu......
  • 下载低版本jenkins
    一目的下载低版本jenkins地址:https://get.jenkins.io/war-stable/二步骤1.进入下载页,选择stable版,PastReleases 2.查看版本对应关系,选择合适版本  ......
  • Django实战项目-学习任务系统-查询列表分页显示
    接着上期代码框架,6个主要功能基本实现,剩下的就是细节点的完善优化了。接着优化查询列表分页显示功能,有很多菜单功能都有查询列表显示页面情况,如果数据量多,不分页显示的话,页面展示效果就不太好。本次增加查询列表分页显示功能,对一个查询列表功能进行分页改造,其他依此类推即可。......
  • Mysql 几种数据类型
    数值类型类型 大小 范围(有符号) 范围(无符号) 用途TINYINT 1Bytes (-128,127) (0,255) ......