Springboot項(xiàng)目打war包docker包找不到resource下靜態(tài)資源的解決方案
前一段時(shí)間遇到一個(gè)問題,是關(guān)于讀取項(xiàng)目中文件資源的問題。我是一個(gè)maven工程 我把一張照片放到resource下面,然后在本地讀取的時(shí)候可以讀取到,但是一旦打成WAR包以后就總是包找不到文件資源錯(cuò)誤。我的war包是springboot打的war包,是內(nèi)嵌的tomcat所以不解壓,然后系統(tǒng)去找路徑的時(shí)候會(huì)發(fā)現(xiàn)是個(gè)WAR包,而圖片在WAR包內(nèi),所以找不到。
為了解決這個(gè)問題,我走了好多彎路,一直在路徑上花費(fèi)時(shí)間。
一開始使用修改配置文件的方式:
# 配置靜態(tài)資源訪問前綴 spring.mvc.static-path-pattern=*/** # 配置靜態(tài)資源路徑,默認(rèn)配置失效 spring.resources.static-locations=../upload
發(fā)現(xiàn)并不行,無法解析出相對(duì)路徑。
最后我是通過系統(tǒng)運(yùn)行去讀取文件源,然后將文件流存儲(chǔ)在服務(wù)器上,存一個(gè)臨時(shí)文件,然后系統(tǒng)再去讀這個(gè)臨時(shí)文件,然后就讀取到這個(gè)文件了。
其實(shí)就是java數(shù)據(jù)流轉(zhuǎn)換為文件
解題思路是上述那樣的。接著就是代碼了
調(diào)用代碼如下
File f = new File("/tmp/image1.jpg"));//臨時(shí)圖片存在的位置 if (!f.exists()) { InputStream in = this.getClass().getResourceAsStream("/templates/emailImg.png");//圖片在項(xiàng)目中的位置 FileUtil.inputstreamtofile(in, f); } // 如果需要使用文件,這個(gè)/tmp/image1.jpg就是臨時(shí)文件路徑
轉(zhuǎn)換方法代碼如下
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(); } }
需要注意一下, 放置臨時(shí)文件的路徑可能是在docker容器中的,而不是在服務(wù)器上. 所以需要先把前面的路徑 mkdirs
, 然后再f.createNewFile;
, 一下再調(diào)用FileUtil.inputstreamtofile
才可以。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Java servlet執(zhí)行流程代碼實(shí)例
這篇文章主要介紹了Java servlet執(zhí)行流程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Java處理時(shí)間格式CST和GMT轉(zhuǎn)換方法示例
這篇文章主要給大家介紹了關(guān)于Java處理時(shí)間格式CST和GMT轉(zhuǎn)換方法的相關(guān)資料,相信很多小伙伴在時(shí)間格式轉(zhuǎn)換的時(shí)候非常頭疼,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09【Java】BigDecimal實(shí)現(xiàn)加減乘除運(yùn)算代碼
本篇文章主要介紹了【Java】BigDecimal實(shí)現(xiàn)加減乘除運(yùn)算代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02springboot自定義starter啟動(dòng)器的具體使用實(shí)踐
本文主要介紹了springboot自定義starter啟動(dòng)器的具體使用實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09spring cloud服務(wù)之間的調(diào)用之ribbon詳解
關(guān)于spring-cloud的服務(wù)調(diào)用,我們首先需要了解它的兩個(gè)核心組件Ribbon和Feign。接下來通過本文給大家詳細(xì)介紹spring-cloud服務(wù)之間的調(diào)用之ribbon,感興趣的朋友一起看看吧2021-08-08Java使用Graphics2D實(shí)現(xiàn)字符串文本自動(dòng)換行
這篇文章主要為大家詳細(xì)介紹了Java如何使用Graphics2D實(shí)現(xiàn)字符串文本自動(dòng)換行,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04spring?boot?導(dǎo)出數(shù)據(jù)到excel的操作步驟(demo)
這篇文章主要介紹了spring?boot?導(dǎo)出數(shù)據(jù)到excel的實(shí)現(xiàn)步驟,文中通過打開一個(gè)平時(shí)練習(xí)使用的springboot的demo給大家詳細(xì)介紹,需要的朋友可以參考下2022-03-03