当前位置:   article > 正文

解决SpringBoot打为jar包后,通过response.getOutputStream下载文件内容为空。_response.getoutputstream()下载文件

response.getoutputstream()下载文件

背景:项目中有一个下载文件模板的功能,文件为excl表格文件。
问题是在Idea运行这个项目时,下载的文件是有内容的。但打为jar包后下载的文件是空的。

解决:
首先查找原因,
发现,一个原因是打为jar包后,路径有变,而我代码中获取文件的方式不适用于Jar包,改为this.getClass().getResourceAsStream("/templates/seatInfoTemplate.xls")解决。

但发现下载的文件还是为空,通过InputStream流对象的available方法获取长度,发现在idea运行时,是返回正常长度的,通过jar运行时,长度为0.
参考https://blog.csdn.net/Nile_Holmes/article/details/113091421得知了原因,同时又参考https://blog.csdn.net/qq_37461349/article/details/108616709明白,必须要有一个File工具类,将获取到的InputStream输入流数据,写入到一个临时文件中,然后才能通过Response的OutputStream对象输出给前端

代码如下:

        File seatInfoTemplate = File.createTempFile("seatInfoTemplate", ".xls");
        //将通过getResourceAsStream方法取得得输入流IO数据同File对象结合。
        FileUtils.copyInputStreamToFile(this.getClass().getResourceAsStream("/templates/seatInfoTemplate.xls"), seatInfoTemplate);

        try {
            //加上设置大小下载下来的.xlsx文件打开时才不会报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
            logger.warn("文件长度:"+seatInfoTemplate.length());
            response.setHeader("Content-Length", String.valueOf(seatInfoTemplate.length()));
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode("seatInfoTemplate.xls".trim(), "UTF-8"));
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        }
        //根据File对象实例化新的输入流IO对象
        InputStream is = new FileInputStream(seatInfoTemplate);

        //获取响应输出流对象。
        OutputStream outputStream = response.getOutputStream();

        //采用工具类,复制输入流IO对象数据至响应输出流。
        IOUtils.copy(is,outputStream );

        //输出
        outputStream.flush();
        outputStream.close();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

这段代码参考:https://blog.csdn.net/lx1315998513/article/details/119699924

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

闽ICP备14008679号