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 參考示例:網站地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM