springboot下载模板文件
我们经常需要将一些模板文件放在springboot项目里,并且通过接口能对这些文件进行下载。
1.文件位置
将模板文件放在/resources/template目录下,文件名称尽量不要用中文,防止线上环境出现编码问题。
2.controller层代码
@RequestMapping("/downLoadTemplate")
public void downLoadTemplate() {
HttpServletResponse resp = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
templateService.downLoadTemplate(resp);
}
3.service层代码
public void downLoadTemplate(HttpServletResponse response) {
//模板名称
String templateName = "ceshimuban.xlsx";
OutputStream out = null;
InputStream input =null;
try {
ApplicationHome h = new ApplicationHome(getClass());
String dirPath = h.getSource().toString();
String fileName = dirPath+"/template/"+templateName;
File outFile = new File(fileName);
input = new BufferedInputStream(new FileInputStream(outFile));
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition",
"attachment;filename=" + new String((templateName).getBytes(), "iso-8859-1"));
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
out = response.getOutputStream();
byte[] buffer = new byte[1024]; // 缓冲区
int bytesToRead = -1;
// 通过循环将读入内容输出到浏览器中
while ((bytesToRead = input.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
} catch (IOException e) {
throw new BizException(new BizDict(UnicomResponseEnums.SYSTEM_ERROR.getCode(), "模板下载失败:" + e.getMessage()));
} finally {
IOUtils.closeQuietly(input);
IOUtils.closeQuietly(out);
}
}
这部分代码可替换
ResourceLoader resourceLoader = new DefaultResourceLoader();
Resource resource = resourceLoader.getResource("classpath:template/"+templateName);
input =resource.getInputStream();