后端流传输excel文件到前端
场景
公司有个需求,请求接口返回一个对应的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";
})
结束
就没了~记录下流传输中前端和后端最重要的部分
后端流传输excel文件到前端的更多相关文章
- 前端调用后端接口下载excel文件的几种方式
今天有一个导出相应数据为excel表的需求.后端的接口返回一个数据流,一开始我用axios(ajax类库)调用接口,返回成功状态200,但是!但是浏览器没有自动下载excel表,当时觉得可能是ajax ...
- 导出网页表格数据为Excel文件的前端解决方案
在工作中,我们有时会遇到这样的需求,比如:要把页面的表格数据导出为Excel文件.在此记录下自己用的解决方法.代码如下: function tableToExcel(data){ //要导出的数据,t ...
- js要怎么接收后端传的excel文件流?
方法1: 无需js,直接用a标签去接你的输出流 <a href="<你的返回流的Action路径>" >下载</a> 方法2:使用js,前提是你 ...
- vue 后台获取文件流导出excel文件
let params = { compStartTm: Date.parse(this.searchForm.compStartTm) / 1000, compEndTm: Date.parse(th ...
- 前端下载excel文件功能的三种方法
1 从后端接收json数据,前端处理生成excel下载 JsonExportExcel的github地址:https://github.com/cuikangjie/JsonExportExcel 这 ...
- form表单提交,Servlet接收并读取Excel文件
首先是jsp页面: <body scroll=no style="overflow-y:hidden;" onselectstart="return false&q ...
- NPOI-Excel系列-1002.创建带有Document Summary Information和Summary Information的Excel文件
1. using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI.POIFS.FileSystem; using Microsoft.VisualSt ...
- .net WebApi 批量文件进行压缩zip以二进制流传输至前端(Vue)下载
前言:最近接了个项目,需要进行将服务端生成的文件进行打包压缩供前端下载,百度查了下资料,决定采用SharpZipLib C#开园的压缩解压库进行服务器文件压缩,在实现过程,郁闷的是前端接收下载下来的压 ...
- Vue接收后端传过来excel表格的文件流并下载
题外话:当接收文件流时要确定文件流的类型,但也有例外就是application/octet-stream类型,主要是只用来下载的类型,这个类型简单理解意思就是通用类型类似 var .object.ar ...
随机推荐
- 代码随想录第四天| 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点 、160.链表相交、142.环形链表II
今天链表致死量 第一题 public static class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { ...
- 1.RabbitMQ系列之服务启动
1. docker方式启动MQ # latest RabbitMQ 3.10 docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:156 ...
- 虚拟化_Vmware——敬请期待!
Esxi 7.0 安装部署完成! vSphere vCenter 安装部署完成!
- java 新特性之 Stream API
强大的 Stream API 一.Stream API 的概述 Stream到底是什么呢? 是数据渠道,用于操作数据源(集合.数组等)所生成的元素序列. "集合讲的是数据,Stream讲的是 ...
- 基于SqlSugar的开发框架循序渐进介绍(17)-- 基于CSRedis实现缓存的处理
在一个应用系统的开发框架中,往往很多地方需要用到缓存的处理,有些地方是为了便于记录用户的数据,有些地方是为了提高系统的响应速度,如有时候我们在发送一个短信验证码的时候,可以在缓存中设置几分钟的过期时间 ...
- photoshop 2021 for mac安装教程,亲测可用!!!
小编分享下photoshop cc 2021 for mac 安装教程,适配M1芯片,让大家完美使用ps2021,畅享所有新功能Adobe Photoshop2021(简称PS) 新版本主要增加了Ne ...
- Linux正则表达式与grep
bash是什么 bash是一个命令处理器,运行在文本窗口中,并能执行用户直接输入的命令 bash还能从文件中读取linxu命令,称之为脚本 bash支持通配符.管道.命令替换.条件判断等逻辑控制语句 ...
- 关于Redis的,你了解多少?来看看我的笔记
Redis 概述 Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据 ...
- Java学习之Filter与Listener
0x00前言 web中的Filiter:当客户端访问服务端资源的时候,过率器可以把请求拦截下来,完成一些特殊的功能 完成的操作一般都是通用的作用:列如登录验证. web中的Listener一般用于加载 ...
- mybatis一对多根据条件查询的查条数
一对多写了mapper映射之后 根据条件查条数 可以根据主表的唯一id进行分组 在拿到它的count select count(0) over(aa.id),,id,name,age from tab ...