每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

SpringBoo项目打包部署Linux后访问不到 resources 下面的模板文件

1. Bug场景

1.1 在开发中经常需要获取资源文件路径,例如读写配置文件,获取resource下的模板文件等

1.2 Windows获取resource下的模板文件,在本地是可以直接获取模板文件并操作

// 第一中方式:getDefaultClassLoader已经过期了
// String path = ClassUtils.getDefaultClassLoader().getResource("static/" + templateFilePath).getPath();

// 推荐使用这种方式
String path = this.getClass().getClassLoader().getResource("static/template/Excel.xlsx").getPath();

FileInputStream fileInputStream = new FileInputStream(paths);

1.3 Linux获取resource下的模板文件,jar包明明是有模板文件但是报错找不到

2. Bug原因

意思读取不到jar包里面的文件,因为springboot是打包jar包,然后是执行运行的jar包,而不是读取的target下面编译好的文件。

由于 Windows 加载本地文件和 Linux 加载本地文件有区别,所以在加载本地文件时,使用方法有所不同。

3 解决方法:通过获取流的方式操作

3.1 Windows获取resource下的模板文件

// 第一中方式:getDefaultClassLoader已经过期了
// String path = ClassUtils.getDefaultClassLoader().getResource("static/" + templateFilePath).getPath();

// 推荐使用这种方式
String path = this.getClass().getClassLoader().getResource("static/template/Excel.xlsx").getPath();

FileInputStream fileInputStream = new FileInputStream(paths);

3.2 Linux获取resource下的模板文件

InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("static/template/Excel.xlsx");

3.3 参考示例:网站地址

posted @ 2022-05-11 15:05  helloliyh  阅读(2412)  评论(0编辑  收藏  举报