使用SpringBoot获取resources文件路径

作者:hongyu#ding 时间:2022-10-12 15:29:56 

获取resources文件路径

背景

在SpringBoot项目中,需要获取resources文件的路径,网上找了好多文章都不行,后面还是结合官方文档实现了,这里记录下,我使用的版本是SpringBoot2.x版本

解决方案

1、获取resources文件夹路径

File directory = new File("xxx/xxx/src/main/resources");
String reportPath = directory.getCanonicalPath();

xxx为你的项目内包的名称,File只会找到项目最外层地址;

这里需要注意,不能在xxx前面加/,否则只会找到顶层地址 

获取resource下文件夹路径的坑

现在有个需求是需要利用模板文件生成HTML 或者 PDF 文件,然后由于HTML 模板文件里面包含图片和字体,然后我就在resource 文件夹下新建了一个文件夹,然后又分类,也就是 resource 下面有个 upload文件夹,有个 templateFile 文件夹,然后才是模板文件。也就是说模板文件在resource下面两级目录里面,那么问题来了。用了各种办法,就是获取不到这个文件。。。。。。。。

前提是maven项目的pom文件里面配置了

maven打包包含这些模板文件:

<build>
       <resources>
           <resource>
               <directory>src/main/resources</directory>
               <includes>
                   <include>**/*.xml</include>
                   <include>**/*.png</include>
                   <include>**/*.html</include>
                   <include>**/*.ttf</include>
                   <include>**/*.TTF</include>
                   <include>**/*.ttc</include>
               </includes>
               <!--是否替换资源中的属性-->
               <filtering>false</filtering>
           </resource>
       </resources>
   </build>

然后install后,可以在当前模块或者项目的 target 文件夹下可以看到我们的模板文件。

这是后来我修改后的正常打包情况

使用SpringBoot获取resources文件路径

其中代码里面,用了好评率最高的这个 ClassPathResource

import org.springframework.core.io;
Resource resource = new ClassPathResource("upload/templateFile");
log.info("contextPath:{}", resource.getURL());

这时候,按照理想情况,应该就是可以打印出来 templateFile 这个文件夹所在的绝对路径了。如果这个文件夹存在resource下面,是可以拿到这个文件夹的绝对路径的。

事实确是空的。。。。。就很神奇,刚开始以为。是不是因为跟别人的项目不一样,才导致的这个问题呢。

后面踩坑了半天,发现,是不是路径太深了,把往前提一层呢,就试下把 templateFile 直接放到 resources 下面,再次尝试,发现上面日志不再是空的了,可以正常取到模板文件所在的绝对路径了。这点windows和Linux都是可以的。

然后看似问题解决了,但是由于我这边部署使用docker镜像部署的,获取模板文件和生成文件也是正常的,但是由于生成的HTML文件用到了各种logo图片文件,然后生成的文件所在位置也挂载到宿主机上了,在容器内部查看生成的文件是正常的,但是到了宿主机上,生成的HTML文件里面的图片就不显示了。

期间尝试了使用文件服务器上的图片,是可以正常显示的,但是由于文件服务器跟外网不通,所以生成的文件,放到别的地方,图片就不显示了。

最后还是采用最笨的方法,将容器内部的某个路径挂载到宿主机的同名路径上,在宿主机的文件夹下存放固定的模板文件和需要用到的图片,路径硬编码写死到程序里面,也是可以正常生成文件和回显的。

来源:https://blog.csdn.net/dinghongyu520/article/details/104702508

标签:SpringBoot,resources,文件路径
0
投稿

猜你喜欢

  • Spring BeanDefinition使用介绍

    2023-11-24 10:29:10
  • Java访问WebService返回XML数据的方法

    2023-11-10 21:23:09
  • java 汉诺塔Hanoi递归、非递归(仿系统递归)和非递归规律 实现代码

    2023-09-13 11:29:31
  • java Semaphore共享锁实现原理解析

    2021-11-02 23:12:38
  • java微信红包实现算法

    2023-08-09 00:19:39
  • 深入浅出讲解Java集合之Map接口

    2023-10-14 20:52:46
  • Java Socket实现多人聊天系统

    2023-08-08 04:44:35
  • 深入解析Java的Spring框架中bean的依赖注入

    2023-12-20 18:50:52
  • java字节码框架ASM的深入学习

    2023-11-29 05:51:19
  • OpenCV和C++实现图像的翻转(镜像)、平移、旋转、仿射与透视变换

    2023-07-14 23:47:22
  • JAVA布局管理器与面板组合代码实例

    2022-04-23 15:48:55
  • Java中的Unsafe在安全领域的使用总结和复现(实例详解)

    2023-07-30 10:58:42
  • 解决JavaWeb读取本地json文件以及乱码的问题

    2023-09-14 18:35:14
  • 小米Java程序员第二轮面试10个问题 你是否会被刷掉?

    2023-11-13 09:00:29
  • java实战之飞机大战小游戏(源码加注释)

    2021-08-01 17:46:08
  • linux系统 java环境变量的配置方法

    2022-12-10 09:34:11
  • Java、JavaScript、Oracle、MySQL中实现的MD5加密算法分享

    2022-08-24 02:42:11
  • Nginx启用压缩及开启gzip 压缩的方法

    2021-09-20 21:19:25
  • java基础的详细了解第五天

    2023-06-02 16:54:04
  • SpringBoot路径映射实现过程图解

    2023-11-13 04:01:11
  • asp之家 软件编程 m.aspxhome.com