在一次项目开发过程中,项目根路径下存放了一张图片,生成二维码的时候调用了该图片作为二维码的logo,在windows环境下二维码可以正常生成,但是部署到生产测试环境之后二维码生成报错,FileNotFoundException jar包资源路径:/BOOT-INF/classes/**/logo.png
在生成二维码的过程中使用了IO流中的File进行文件读取代码如下:
Resource resource = new ClassPathResource(imgPath);
File file = resource.getFile();
if (!file.exists()) {
System.err.println("" + imgPath + " 该文件不存在!");
return;
}
Image src = ImageIO.read(file);
通过file读取文件的时候再接口调用的时候会使用jar:file//来读取服务器绝对路径下的资源:jar:file//***/logo.png
而此时logo.png文件在linux服务器下的绝对路径是不存在的,所以会报错文件找不到
针对这种情况可以在linux服务器上新建一个相同的路径放入相同的图片也可以解决问题
=================================================================================================
修改后通过inputStream流进行文件读取代码如下:
ClassPathResource resource = new ClassPathResource(imgPath);
InputStream inputStream = resource.getInputStream();
Image src = ImageIO.read(inputStream);
通过流读取的时候会去掉文件路径前边的‘/’,转而从相对路径的classpath下边开始找,转成流再进行处理
表面上看是这个样子,具体底层实现涉及到
ClassPathResource,Class等几个jdk自带的类对象,本人水平有限还望各位过路大佬指点...联系邮箱448436255@qq.com