文章目录
前言
这是一个提供后台数据导出的方案。
在我们业务场景的时候,需要对于一些订单数据或者操作记录等中台展示的数据导出给到业务。
主要的话可以有这么几种方法:
- 通过GET方法使用流的方式导出到前端
- 通过OSS存储文件,给出文件路径提供下载。OSS也可以换成腾讯的COS,同理。
主要的流程就是,
- 组装数据
- 创建文件(excel表格数据(xls) or 纯文本形式存储表格数据(csv))。
- 导出数据。
操作
文件流式
TIPS: 通过设定get请求,在入参设定给定HttpServletResponse
1. 设定请求
文件流式的导出需要将流添加到响应体中,POST
请求笔者目前无法拿出响应体,所以需要的是设定GET
请求。
2. 组装数据
通过请求携带的参数通过查询接口获取到集合数据。通常的场景都是分页查询的中台接口,所以在获取数据的时候记得分页参数的设定,
3. 创建文件导出数据
Excel文件
POI
poi是直接设定工作簿,sheet页,然后添加边框和数据等方式去添加成xls
文件。然后加到响应里面。
Easy Excel
Easy Excel 的所用代码量会更少,主要是通过对于数据定义成类,通过注解去定义行字段定义
。然后写进响应里面。
导出方法:
如果想要导出到本地目录的话可以指定文件流地址。
效果:
纯文本格式数据
csv:格式的表格主要是需要通过设定每行一个特定名,与数据类一一对应上,然后去生成文件。如果给定的行名在数据类里面找不到,那么这一行会为空。
这个方法会没有表头,如果想要设定表头,可以使数据类全部属性都为String
,然后再数据集合最前面手动添加一行表头数据。
csv
效果:
B列式因为aaa
在数据类里面找不到,数据类是userPhone
,所以没有。想同才会导出。
导出方法:
Tips:
同理,如果想要把csv文件以流的方式给出去,可以把csvMapper.writeValues
的file
替换成ServletOutputStream
。
4. OSS
创建桶
看到这样的提示说明创建成功。
将aaa.csv
文件上传的OSS
服务的xxx
目录下面,指定好我们新建立的这个桶的Endpoint
,bucket
,path
等就可以存储进去。但是需要我们去配置秘钥。
endpoint
在这: 进入到桶的概述,然后查看访问端口那
path
可以自己定义,不存在的话会自动生成。
秘钥
然后就是拿accessKeyId
与accessKeySecret
。云账号 AccessKey 是您访问阿里云 API 的密钥,具有账户的完全权限。这个秘钥相当于就是你的账号的访问密码,有了这个就可以操作你的阿里云账号了。但是对于我们的一个OSS服务权限不可能说给他主账号的使用权限的,这样风险太大了,所以可以创建子账号给定权限给子账号,这样子就可以规避一些危险情况。
主账号
右上角的AccessKey管理
子账号
右上角的访问控制管理
创建一个用户
然后添加一个用户组,给用户绑定该用户组。
给这个用户组添加权限
选中权限添加
然后这个用户组所有的用户就有了添加的这个权限了。
获取这个子账户的秘钥就可以去使用了。
上传方法
拿到url之后,浏览器访问改地址下载。
效果
配置权限
配置访问权限可以直接通过url进行下载,不用权限校验
url是这样子
最后
- 返回的url给到前端给到用户点击下载这个可能会有危险数据提示,需要点好多确认才能下载到,如果提供文件流直接放到响应体里面的话就可以直接去下载。
- 响应体类型的导出只能用
GET
请求,这样可以获取到HttpServletResponse
,然后去拿到ServletOutputStream
。
OSS
需要引入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
CSV
需要引入依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>2.15.2</version>
</dependency>
EasyExcel
需要引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
POI
需要引入依赖
<!--xls-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!--xlsx-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
POI
的也可以使用EasyExcel
的包。