当前位置:   article > 正文

spring jar包状态下 resource文件夹的资源下载为空文件损坏问题_springboot 从resource下载文件 服务器端空的

springboot 从resource下载文件 服务器端空的

公司有个需求是下载excel的模板文件,我将excel文件放在了resouece资源文件夹下,通过文件流读取并写入到response流当中,调试接口文件能下载一切正常。后面打成jar包上到服务环境之后,下载的excel体积为0kb 并且打开之后显示文件是损坏的。后面通过将resouece资源文件夹下的文件先暂存到一个临时文件中,再读取临时文件的流解决了这个损坏文件的问题。

 
  1. public void downLoadTemplate(HttpServletResponse response, HttpServletRequest request) throws IOException {
  2. String fileName = "机构导入模板.xlsx";
  3. ClassPathResource classPathResource = new ClassPathResource("/excel/机构导入模板.xlsx");
  4. InputStream inputStream = classPathResource.getInputStream();
  5. //生成目标文件
  6. File somethingFile = File.createTempFile("Topic_Template", ".xlsx");
  7. try {
  8. FileUtils.copyInputStreamToFile(inputStream, somethingFile);
  9. } finally {
  10. IOUtils.closeQuietly(inputStream);
  11. }
  12. InputStream in = new FileInputStream(somethingFile);
  13. FileDownLoadUtil.getFileContent(in, fileName, response, request);
  14. }
  1. public static void getFileContent(InputStream inputStream, String name, HttpServletResponse response, HttpServletRequest request) {
  2. // 清空response
  3. response.reset();
  4. try {
  5. InputStream in = inputStream;
  6. response.setHeader("Content-Length", String.valueOf(in.available()));
  7. byte[] buffer = new byte[in.available()];
  8. //不加打开会文件损坏
  9. in.read(buffer);
  10. in.close();
  11. String userAgent = request.getHeader("User-Agent");
  12. String fileName;
  13. if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
  14. fileName = URLEncoder.encode(name, "UTF-8");
  15. } else {
  16. // 非IE浏览器的处理:
  17. fileName = new String(name.getBytes("UTF-8"), "ISO-8859-1");
  18. }
  19. // 设置response的Header
  20. response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
  21. OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
  22. response.setContentType("application/octet-stream");
  23. toClient.write(buffer);
  24. toClient.flush();
  25. toClient.close();
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. }
  29. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/815941
推荐阅读
相关标签
  

闽ICP备14008679号