赞
踩
备注:controller层一定要用post!!!!!!post!!!!post!!!!因为我喜欢post
打开文件情况下会在res下生成$开头的同名文件
备注:以~$开头的文档是word的自我保护程序,其目的是为了防止正在编辑的文档信息因为意外情况关闭而丢失。(这是我在备注之后,研究了研究加的。get好像也没事)
用的时候,filename改为自己res下tamplet下的文件名.xlsx就行了,其他都不用动。、
现在我直接C了代码,改文件名,全部测试成功
- /**
- * * 基于res下xlsx读取文件并传输给前端
- * @param response
- */
- @Override
- public void eventUploadTemplateQuickTrackingAtResources(HttpServletResponse response) {
- String fileName = "EventUploadTemplate_QuickTracking.xlsx";
- //读取文件
- try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("template/" + fileName);
- ServletOutputStream servletOutputStream = response.getOutputStream()) {
- if (inputStream == null) {
- throw new BusinessException("模板文件不存在");
- }
- //设置响应
- EasyExelUtil.setResponse(response, fileName);
- IOUtils.copy(inputStream, servletOutputStream);
- response.flushBuffer();
- } catch (IOException e) {
- log.error("下载模板文件错误", e);
- throw new BusinessException("下载模板文件错误");
- }
- }
- }

- public static HttpServletResponse setResponse(HttpServletResponse response, String fileName) {
- response.setContentType("application/vnd.ms-excel");
- response.setCharacterEncoding("UTF-8");
- try {
- response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
- } catch (UnsupportedEncodingException e) {
- log.error("编码设置异常");
- throw new BusinessException("编码设置异常");
- }
- return response;
- }
- //参考
- //备注:如使用此版本,文件名字及相关resp参数(可能会有问题,显示为resp)需要改为我上面代码
-
- @Slf4j
- @RestController
- public class TestController {
-
- @Autowired
- private ResourceLoader resourceLoader;
-
- /**
- * 实现方式1
- * @param response
- * @param request
- */
- @ApiOperation("下载模板")
- @GetMapping("/downloadTemplate")
- public void downloadTemplate(HttpServletResponse response, HttpServletRequest request) {
-
- InputStream inputStream = null;
- ServletOutputStream servletOutputStream = null;
- try {
- String filename = "excel导入模板.xlsx";
- String path = "template/test.xlsx";
- Resource resource = resourceLoader.getResource("classpath:"+path);
-
- response.setContentType("application/vnd.ms-excel");
- response.addHeader("Cache-Control", "no-cache, no-store, must-revalidate");
- response.addHeader("charset", "utf-8");
- response.addHeader("Pragma", "no-cache");
- String encodeName = URLEncoder.encode(filename, StandardCharsets.UTF_8.toString());
- response.setHeader("Content-Disposition", "attachment; filename=\"" + encodeName + "\"; filename*=utf-8''" + encodeName);
-
- inputStream = resource.getInputStream();
- servletOutputStream = response.getOutputStream();
- IOUtils.copy(inputStream, servletOutputStream);
- response.flushBuffer();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (servletOutputStream != null) {
- servletOutputStream.close();
- }
- if (inputStream != null) {
- inputStream.close();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
- /**
- * 实现方式2
- * @param response
- * @param request
- * @throws IOException
- */
- @ApiOperation("下载模板")
- @GetMapping("/downloadTemplate1")
- public void downloadTemplate1(HttpServletResponse response, HttpServletRequest request) throws IOException {
-
- ClassPathResource classPathResource = new ClassPathResource("template/test.xlsx");
- InputStream inputStream = classPathResource.getInputStream();
- ServletOutputStream servletOutputStream = null;
- try {
- String filename = "excel导入模板.xlsx";
- response.setContentType("application/vnd.ms-excel");
- response.addHeader("Cache-Control", "no-cache, no-store, must-revalidate");
- response.addHeader("charset", "utf-8");
- response.addHeader("Pragma", "no-cache");
- response.setHeader("Content-Disposition", "attachment;fileName=" + new String(filename.getBytes(), StandardCharsets.ISO_8859_1) + ".xlsx");
- servletOutputStream = response.getOutputStream();
- IOUtils.copy(inputStream, servletOutputStream);
- response.flushBuffer();
- } catch (Exception e) {
- log.error("下载模板文件错误",e);
- e.printStackTrace();
- } finally {
- try {
- if (servletOutputStream != null) {
- servletOutputStream.close();
- }
- if (inputStream != null) {
- inputStream.close();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。