关于springboot项目通过jar包启动之后无法读取项目根路径静态资源

  在一次项目开发过程中,项目根路径下存放了一张图片,生成二维码的时候调用了该图片作为二维码的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
posted @ 2020-03-16 12:41  FlyingBread  阅读(2560)  评论(0编辑  收藏  举报