@PreAuthorize(HASANYROLE_ALL) @PostMapping("/template/download") @ResponseBody public void getApplicationTemplate(HttpServletRequest req, HttpServletResponse res) { try { //获取要下载的模板名称 String fileName = "exportFileTemplate.xls"; res.setHeader("Content-Disposition", "attachment;fileName=" + fileName); //通知客服文件的MIME类型 res.setContentType("application/vnd.ms-excel;charset=UTF-8"); //获取文件的路径 (如果使用此该行代码来实现的话会出现在本地测试没问题, 打Jar包部署后出现文件损坏的问题,所以不建议使用) // File file = ResourceUtils.getFile("classpath:static/"+fileName); InputStream input = Thread.currentThread().getContextClassLoader(). getResourceAsStream(("templates/" + fileName)); OutputStream out = res.getOutputStream(); int len; byte[] b = new byte[2048]; while ((len = input.read(b)) != -1) { out.write(b, 0, len); } res.setHeader("Content-Length", String.valueOf(input.available())); input.close(); out.close(); } catch (Exception ex) { //log.error("getApplicationTemplate :",ex); } }
注:(1)返回类型非void情况下,可能出现以JAR启动后,导出文件出现损坏的情况。
(2)输入、输出流未关闭的情况,也可能出现文件损坏的情况。