场景

公司有个需求,请求接口返回一个对应的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";
})

结束

就没了~记录下流传输中前端和后端最重要的部分

最新文章

  1. Swift基础语法学习总结(转)
  2. 部署web应用
  3. [转] Java序列化与反序列化
  4. 使用Chrome工具来分析页面的绘制状态
  5. mysql学习笔记 第七天
  6. Android手势锁实现
  7. MySQL Server 5.6 配置文件my.ini 以及windows上mysql表名区分大小写
  8. Summarize code for the three presentation experiments
  9. 剑指OFFER之旋转数组的最小数字(九度OJ1386)
  10. JavaScript正则验证数字、英文、电话号、身份证号、邮箱地址、链接地址等
  11. Linux下进程间管道通信小作业
  12. Javascript base64加密 解密
  13. java之适配器模式
  14. Coreseek:indexer crashed不解之谜
  15. 今天用C#做的一个小的注册练习
  16. iOS 开发中中 textView 作为子控件点击输入文本,然后退出文本的方式
  17. [python]_ELVE_pip2和pip3如何共存
  18. Linux下tomcat中多项目配置druid报错的问题
  19. poj 3678(SCC+2-SAT)
  20. &lt;Spark&gt;&lt;Tuning and Debugging&gt;

热门文章

  1. 洛谷P3381 (最小费用最大流模板)
  2. 洛谷P3810 陌上花开 (cdq)
  3. [C#]SourceGenerator实战: 对任意对象使用await吧!!!
  4. Windows Server 2012部署遇到的问题
  5. AT24C02
  6. 驱动开发:内核运用LoadImage屏蔽驱动
  7. 支持向量机(SVM)公式整理
  8. Oracle数据泵导入dmp文件,报ORA-39083、ORA-01917错误解决办法
  9. EasyPoi 导出Excel(ExcelExportEntity生成表头)
  10. 使用CRD扩展Kubernetes API