后端流传输excel文件到前端
2024-10-19 16:28:42
场景
公司有个需求,请求接口返回一个对应的excel数据
方法
- 1、可以使用后端生成excel后,返回一个下载地址
- 2、可以把数据吐给前端,前端使用对应的插件转换成excel数据
- 3、使用流式传输
优缺点
- 1、第一种方法,需要定期清理本地缓存的excel文件,需要单独的程序运行
- 2、第二种方法,需要用到前端一定的电脑内存,我们的客户机器比较老旧,所以可能会对用户的电脑造成一定的卡顿
- 3、第三种方法,流式数据的传输在一定意义上解决了这些问题,但是如果传输过程中断是需要重新传输的(采用)
架构
前端采用 Angular 后端采用 Golang,框架是Gin,后端excel包采用excelize
开始
后端处理
后端需要注意header的头设置
c.Header("response-type", "blob")
c.Header("Content-Type", "application/vnd.ms-excel;charset=utf8")
返回的时候
//先将excel的内容写进buffer
data, _ := excelFile.WriteToBuffer()
//再使用gin自带的buffer响应或者这个excel插件自带的buffer响应返回给前端流数据
_, _ = data.WriteTo(c.Writer) //插件自带响应 (c *gin.Context)
c.Writer.Write(data.Bytes()) //gin框架的流响应
前端处理
- 1、首先是请求部分处理
getExcelData(searchParams: { [key: string]: string }):Observable<any>{
// @ts-ignore
return this.http.get<any>(`/api/report-output`,{params: HttpUtils.getSearchParams(searchParams), responseType: 'blob'}); //responseType必须是blob二进制流类型
}
- 2、subscribe处理
this.service.getExcelData(this.searchParams).subscribe((reader)=>{
const blob = new Blob([reader],{type:'application/vnd.ms-excel'});
let date = new Date
saveAs(blob,`${name}-${formatDate(date, 'yyyy-MM-dd', this.locale)}.xlsx`) //这里需要借助saveAs插件 import { saveAs } from "file-saver";
})
结束
就没了~记录下流传输中前端和后端最重要的部分
最新文章
- Swift基础语法学习总结(转)
- 部署web应用
- [转] Java序列化与反序列化
- 使用Chrome工具来分析页面的绘制状态
- mysql学习笔记 第七天
- Android手势锁实现
- MySQL Server 5.6 配置文件my.ini 以及windows上mysql表名区分大小写
- Summarize code for the three presentation experiments
- 剑指OFFER之旋转数组的最小数字(九度OJ1386)
- JavaScript正则验证数字、英文、电话号、身份证号、邮箱地址、链接地址等
- Linux下进程间管道通信小作业
- Javascript base64加密 解密
- java之适配器模式
- Coreseek:indexer crashed不解之谜
- 今天用C#做的一个小的注册练习
- iOS 开发中中 textView 作为子控件点击输入文本,然后退出文本的方式
- [python]_ELVE_pip2和pip3如何共存
- Linux下tomcat中多项目配置druid报错的问题
- poj 3678(SCC+2-SAT)
- <;Spark>;<;Tuning and Debugging>;
热门文章
- 洛谷P3381 (最小费用最大流模板)
- 洛谷P3810 陌上花开 (cdq)
- [C#]SourceGenerator实战: 对任意对象使用await吧!!!
- Windows Server 2012部署遇到的问题
- AT24C02
- 驱动开发:内核运用LoadImage屏蔽驱动
- 支持向量机(SVM)公式整理
- Oracle数据泵导入dmp文件,报ORA-39083、ORA-01917错误解决办法
- EasyPoi 导出Excel(ExcelExportEntity生成表头)
- 使用CRD扩展Kubernetes API