当前位置: 首页 > 编程笔记 >

Springboot项目打war包docker包找不到resource下静态资源的解决方案

养焱
2023-03-14
本文向大家介绍Springboot项目打war包docker包找不到resource下静态资源的解决方案,包括了Springboot项目打war包docker包找不到resource下静态资源的解决方案的使用技巧和注意事项,需要的朋友参考一下

前一段时间遇到一个问题,是关于读取项目中文件资源的问题。我是一个maven工程 我把一张照片放到resource下面,然后在本地读取的时候可以读取到,但是一旦打成WAR包以后就总是包找不到文件资源错误。我的war包是springboot打的war包,是内嵌的tomcat所以不解压,然后系统去找路径的时候会发现是个WAR包,而图片在WAR包内,所以找不到。

为了解决这个问题,我走了好多弯路,一直在路径上花费时间。

一开始使用修改配置文件的方式:

# 配置静态资源访问前缀
spring.mvc.static-path-pattern=*/**
# 配置静态资源路径,默认配置失效
spring.resources.static-locations=../upload

发现并不行,无法解析出相对路径。

最后我是通过系统运行去读取文件源,然后将文件流存储在服务器上,存一个临时文件,然后系统再去读这个临时文件,然后就读取到这个文件了。

其实就是java数据流转换为文件

解题思路是上述那样的。接着就是代码了

调用代码如下

File f = new File("/tmp/image1.jpg"));//临时图片存在的位置
      if (!f.exists()) {
        InputStream in = this.getClass().getResourceAsStream("/templates/emailImg.png");//图片在项目中的位置
        FileUtil.inputstreamtofile(in, f);
      }
      // 如果需要使用文件,这个/tmp/image1.jpg就是临时文件路径

转换方法代码如下

public static void inputstreamtofile(InputStream ins, File file) {
    try {
      OutputStream os = new FileOutputStream(file);
      int bytesRead = 0;
      byte[] buffer = new byte[8192];
      while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
        os.write(buffer, 0, bytesRead);
      }
      os.close();
      ins.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

需要注意一下, 放置临时文件的路径可能是在docker容器中的,而不是在服务器上. 所以需要先把前面的路径 mkdirs, 然后再f.createNewFile;, 一下再调用FileUtil.inputstreamtofile才可以。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。如果你想了解更多相关内容请查看下面相关链接

 类似资料:
  • 本文向大家介绍Eclipse Web项目打成war包的方法图解,包括了Eclipse Web项目打成war包的方法图解的使用技巧和注意事项,需要的朋友参考一下 war包即Web归档文件,将Web项目打成war包可以直接拷贝到Web服务器发布目录(例如Tomcat服务器webapps目录 ),当Tomcat启动后该压缩文件自动解压缩,war包方便了web工程的发布,那么在Eclipse中如何将Web

  • 本文向大家介绍springboot打包jar和war包的教程图解,包括了springboot打包jar和war包的教程图解的使用技巧和注意事项,需要的朋友参考一下 Maven小白系列,我们会分为几个部分? 01 添加依赖并打包 02 添加本地jar包并打包 03 将本地jar包导入本地maven库 04 springboot打包jar和war 05 Maven统一版本管理 接下来,我们开始第四部分

  • 这个问题非常相似(如果不是相同的话): “找不到基本名称消息的捆绑包”错误 为MessageSource找不到ResourceBundle[消息]:无法为基名消息找到bundle 基本上,我有以下代码: 当我试着跑的时候 我试图更改文件名,在代码中更改文件名,添加资源文件夹(但我认为它已经被正确地包括在内),并放置消息。属性文件位于所有可能的文件夹中。奇怪的是,eclipse本身显示了这个错误,它

  • 本文向大家介绍springboot项目打成war包部署到tomcat遇到的一些问题,包括了springboot项目打成war包部署到tomcat遇到的一些问题的使用技巧和注意事项,需要的朋友参考一下 开发环境使用jdk1.8.0_60,把springboot 项目打成war包后, 部署到apache-tomcat-7.0.68时报错如下,换成apache-tomcat-8.0.9解决 另外spri

  • 请教Webpack打包后找不到资源? 入口文件如下: 打包在lib目录,如下: 入口文件index_bundle.js在package.json中设置main指向./lib/index_bundle.js就好了 但是874.index_bundle.js这个文件就找不到了,提示如下 于是我去查了下,说是要设置homepage 但是无论我是设置./lib/还是设置.,都不对 于是我想是不是要将hom

  • 我想做一个UI组件,然后使用的是Vue3+Vite+Ts+tailwindcss 问题出现在这个静态资源这里,我的静态资源放在了src/assets下,包括图片还有style.css, 然后我使用Vite的库模式打包,并没有打包我的style.css文件,只打包了vue文件中的style标签的css,并且静态文件的图片也是没有打包,而是直接转换成了base64,对于图片多的情况下,这样页面会很卡顿