溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Springboot項(xiàng)目打war包docker包找不到resource下靜態(tài)資源的解決方案

發(fā)布時(shí)間:2020-09-27 12:22:12 來源:腳本之家 閱讀:554 作者:雙斜杠少年 欄目:編程語言

前一段時(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)鏈接

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI