關於springboot項目通過jar包啟動之后無法讀取項目根路徑靜態資源


  在一次項目開發過程中,項目根路徑下存放了一張圖片,生成二維碼的時候調用了該圖片作為二維碼的logo,在windows環境下二維碼可以正常生成,但是部署到生產測試環境之后二維碼生成報錯,FileNotFoundException     jar包資源路徑:/BOOT-INF/classes/**/logo.png

  在生成二維碼的過程中使用了IO流中的File進行文件讀取代碼如下: 

   Resource resource = new ClassPathResource(imgPath);
   File file = resource.getFile();
   if (!file.exists()) {
   System.err.println("" + imgPath + " 該文件不存在!");
   return;
   }
  Image src = ImageIO.read(file);
通過file讀取文件的時候再接口調用的時候會使用jar:file//來讀取服務器絕對路徑下的資源:jar:file//***/logo.png
而此時logo.png文件在linux服務器下的絕對路徑是不存在的,所以會報錯文件找不到
針對這種情況可以在linux服務器上新建一個相同的路徑放入相同的圖片也可以解決問題

=================================================================================================

修改后通過inputStream流進行文件讀取代碼如下:
  
  ClassPathResource resource = new ClassPathResource(imgPath);

  InputStream inputStream = resource.getInputStream();
  Image src = ImageIO.read(inputStream);
通過流讀取的時候會去掉文件路徑前邊的‘/’,轉而從相對路徑的classpath下邊開始找,轉成流再進行處理

表面上看是這個樣子,具體底層實現涉及到
ClassPathResource,Class等幾個jdk自帶的類對象,本人水平有限還望各位過路大佬指點...聯系郵箱448436255@qq.com


免責聲明!

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



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