在一次項目開發過程中,項目根路徑下存放了一張圖片,生成二維碼的時候調用了該圖片作為二維碼的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
