SpringBoot打jar包-下载文件时报错-class path resource xxxxxx cannot be resolved to URL because it does not exist

时间:2024-02-01 10:45:58

一、问题由来

  新项目的开发中,打包方式由war包改为了jar包的方式,这样在部署的时候更加的方便。测试环境使用pm2这个工具来管理项目的运行,停止,重启等等非常方便。

可是当测试人员在测试项目中的文件下载时,就报了一个奇怪的错误,class path resource  xxxxxx  cannot be resolved to URL because it does not exist。大意就是说

某个路径下的资源文件不存在,下载的是模板excel文件,项目中就直接把它放在resources路径下,在该路径下又创建了一个目录用于统一存放模板。测试人员提BUG

后,我们开发就得想办法解决,一步一步排查问题,分析问题,解决问题。


二、问题分析

  首先确定一点,将项目打成war包时都是好好的,可以正常下载。现在打成jar包进行发布,怎么突然就不行了呢?于是我找到该段代码进行分析,如下:

 

 

 最开始写文件下载那个人,是使用一个统一的方法进行下载,首先将需要下载的模板文件信息统一配置在配置文件当中。

 

 

 使用一个配置类统一的进行读取,页面中需要下载什么模板时,只需要传入对应的类型即可,这样操作很方便,并且可以动态配置。可是在读取的时候处理

方式有些特别,首先是通过类 ClassPathResource 类进行读取,然后将读取到的内容转换为一个File文件,在将这个文件转换为字节数组,响应给前端。看到

这里时我认为这种操作有些多余,并且在看了好几篇博客后,尝试着进行更改代码。


三、解决方案

  改动的方式为读取文件的方式还是一样,只是不在做复杂的转换,读取到文件内容后,直接获取其输入流,然后将输入流转换为字节流即可。

InputStream is = resource.getInputStream();

byte[] outBytes = IOUtils.toByteArray(is);

只改动这两句,修改完后重写打包测试,问题解决。由此可以判断,问题就出在将获取的文件内容转换为文件,然后在将文件转换为字节数组这步操作。

参考文章一

https://www.jianshu.com/p/7d7e5e4e8ae3

参看文章二

https://www.cnblogs.com/suizhikuo/p/13413738.html

参考文章三

https://blog.csdn.net/qq_34896199/article/details/107082991