栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

django下载或者导出文件

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

django下载或者导出文件

测试管理平台需要增加导出用例成Excel的功能 有两种方式

一种是 Django获取数据先生成本地文件 读取本地文件后再传递给前端

还一种是 Django获取数据 生成文件流 文件流传给前端

第一种资料比较多 但是要每次下载都要在本地生成文件 太过繁琐 这边选择第二种方式

步骤

先处理Django后端

这边使用的是openpyxl

wb Worbook()
ws wb.active
.....
ws是个worksheet对象 我的目的是将其变成二进制数据
通过BytesIO()来处理
from io import BytesIO
output BytesIO()
wb.save(output) #这句是将worksheet保存到二进制字节中去
output.seek(0) #output读取所以数据
response FileResponse(output) #定义FileResponse 里面传字节流进去
最后返回的是response文件流 我的文件名想单独字段传递给前端 咋办
通过加response的headers来处理
还有文件名中文乱码咋搞 通过escape_uri_path来处理
tname 你好哟 
tname escape_uri_path(tname)
fileName tname time.strftime( %y%m%d%H%M%S ) .xlsx 
response[ name ] fileName
response[ Access-Control-Expose-Headers ] name #这个name是上一句的key
response[ Content-Type ] applecation/octet-stream 
#这边不加Content-Disposition也可以
return response

前端需要处理两个 一个是请求参数这么设置 还一个是相应和文件名咋处理

请求参数ajax需要设置responseType: blob

this.$axios({
 method: post ,
 url: /test/export/ ,
 data: this.exportData,
 responseType: blob 
}).then(function(res){
其实就是通过创建a标签来处理打开href链接来下载 最后在移除a标签就行
 let url window.URL.createObjectURL(res.data)//res.data就是接口返回的文件对象
 let a document.createElement( a )
 a.href url
 a.download decodeURI(res.headers.name)//res.headers.nam就可以获取自定义的名称 再解码
 document.body.appendChild(a)
 a.click()
 window.URL.revokeObjectURL(url)
 document.body.removeChild(a)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/266650.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号