Springboot 引入 EasyExcel 写入数据到流 直接让前端下载(Vue + axios请求)
easyexcel
快速、简洁、解决大文件内存溢出的java处理Excel工具
项目地址:https://gitcode.com/gh_mirrors/ea/easyexcel
免费下载资源
·
Springboot 引入 EasyExcel 写入数据到流 直接让前端下载(Vue + axios请求)
前言
easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便。
有时我们的用户需要导出他们查询到的数据,这时,就可以使用easyexcel直接将数据写入流,提供下载。
一、Springboot 引入 EasyExcel 依赖
如果你在网上看到还要引入 poi 什么的依赖,那是针对旧版 easyexcel ,现在的版本不需要引入其他依赖,就下面的就可以了。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
二、后端代码
@RequestMapping("/download")
public void download(HttpServletResponse response) throws IOException {
// 这里的 ContentType 要和前端请求携带的 ContentType 相对应
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("测试", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
// DownloadData 是实体类,sheet 里面是 sheet 名称,doWrite 里面放要写入的数据,类型为 List<DownloadData>
EasyExcel.write(response.getOutputStream(), DownloadData.class).autoCloseStream(Boolean.FALSE).sheet("模板").doWrite(downloadDataList);
}
三、前端代码
getExcel(){
//你们的函数不一定是 axios ,根据你们自己配置的来
axios({
headers: {
//这里和后端的相对应
"Content-Type": "application/vnd.ms-excel",
},
//这里也可以是 blob
responseType: "arraybuffer"
method: "post",
url: '/download',
// 请求参数,可以为空
params: {
},
}).then(successResponse=> {
//这里面是请求成功以后下载文件的方法
let objectUrl = successResponse
const blob = new Blob([successResponse], {'application/vnd.ms-excel'});
objectUrl = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = objectUrl;
//这里可以重新定义文件名,以前端为准
a.download = "test.xlsx";
a.click();
a.remove();
URL.revokeObjectURL(objectUrl)
});
},
四、PostMan测试方法
GitHub 加速计划 / ea / easyexcel
31.64 K
7.47 K
下载
快速、简洁、解决大文件内存溢出的java处理Excel工具
最近提交(Master分支:3 个月前 )
c42183df
Bugfix 3 个月前
efa7dff6 * 重新加回 `commons-io`
3 个月前
更多推荐
已为社区贡献12条内容
所有评论(0)