下载文件模板使用 ClassPathResource resource = new ClassPathResource(fileName); 读取文件模板
1、导入和下载模版
/**
* 导入excel
*
* @param file excel文件
* @return 导入结果
*/
@PostMapping("/importExcel")
public Result importExcel(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ResultDataUtil.error("文件不能为空");
}
// 获取文件名,带后缀
String fileName = file.getOriginalFilename();
// 获取文件后缀
String suffix = fileName.substring(fileName.lastIndexOf("."));
File excelFile = null;
try {
excelFile = File.createTempFile(file.getName(), suffix);
FileUtils.copyInputStreamToFile(file.getInputStream(), excelFile);
String mimeType = FileUtil.getMimeType(excelFile.getPath());
// excel 类型匹配
boolean anyMatch = Arrays.stream(GlobalConstant.MIMETYPE_EXCEL).anyMatch(x -> x.equalsIgnoreCase(mimeType));
if (anyMatch) {
log.info("开始解析excel");
ExcelReadListener<T> excelListener = new ExcelReadListener();
// 文件类型正确,开始解析excel
EasyExcelUtils.read(file.getInputStream(), T.class, excelListener);
// 获取表数据
List<T> excelDataList = excelListener.getDatas();
log.info("excel解析完成,开始处理数据");
return ResultDataUtil.success();
}
return ResultDataUtil.error("文件类型错误");
} catch (IOException e) {
log.error(e.getMessage(), e);
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
// 程序结束时,删除临时文件
if (excelFile.exists()) {
excelFile.delete();
}
}
return ResultDataUtil.error("上传失败");
}
/**
* 下载模板
*/
@GetMapping("/downTemplate")
public void downApiDoc(HttpServletRequest request, HttpServletResponse response) {
BufferedInputStream inputStream = null;
OutputStream outs = null;
String fileName = "doc/API_interface.docx";
try {
ClassPathResource resource = new ClassPathResource(fileName);
if (resource.exists()) {
outs = response.getOutputStream();
// 文件存在才能下载
response.setContentType("application/octet-stream");
response.setHeader("content-type", "application/octet-stream");
// 设置文件名
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));
inputStream = new BufferedInputStream(resource.getInputStream());
byte[] buffer = new byte[1024];
while ((inputStream.read(buffer)) > 0) {
outs.write(buffer);
outs.flush();
}
} else {
log.error("模板 [{}] 不存在", fileName);
}
} catch (IOException e) {
log.error(e.getMessage(), e);
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outs != null) {
try {
outs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2、添加 pom.xml 配置,处理导出模版乱码问题
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.xlsx</exclude>
<exclude>**/*.xls</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.xlsx</include>
<include>**/*.xls</include>
</includes>
</resource>
</resources>