1. 直接导出文件
1.1 导出xlsx表格
使用插件easyExcel
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
@GetMapping("/testXlsx/{id}")
@ApiOperation("导出-编号")
public void exportArrangeXlsx(@PathVariable("id") Integer id, HttpServletResponse response) throws IOException {
//要导出的数据
List<ExportVO> exportXlsx = exportServer.export(id);
// 这里注意 使用swagger可能会导致各种问题,请直接用浏览器或者用postman
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String testName = "test.xlsx";
String fileName = URLEncoder.encode(testName , "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
EasyExcel.write(response.getOutputStream(), ExportVO.class)
.sheet("test")
.doWrite(() -> exportXlsx);
}
1.2 导出docx文档
使用插件ap-poi ,官方文档:https://deepoove.com/poi-tl/1.10.x/
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.12.2</version>
</dependency>
@GetMapping(value = "/testDocx/{id}")
@ApiOperation("导出-检录名单【需要合并素质三项】")
public void exportCheckList2(@PathVariable("id") Integer matchId,HttpServletResponse response) throws IOException {
XWPFTemplate template = exportServer.exportCheckList2(matchId);
String fileName = "test.docx";
// 设置响应头
fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
// 写入文件到响应输出流
try (ServletOutputStream out = response.getOutputStream()) {
template.write(out);
}
// 关闭模板
template.close();
}
1.3 前端js部分代码
export const saveFile = (response, fileName = '') => {
//获取文件名
if (fileName === '') {
fileName = response.headers["content-disposition"].split(";")[1].split("=")[1];
// 转中文字符
fileName = decodeURIComponent(fileName);
console.log(fileName);
}
...
}
1.4 浏览器显
查看响应头
控制台: