SpringBoot打jar包-下載文件時報錯-class path resource xxxxxx cannot be resolved to URL because it does not exist


一、問題由來

  新項目的開發中,打包方式由war包改為了jar包的方式,這樣在部署的時候更加的方便。測試環境使用pm2這個工具來管理項目的運行,停止,重啟等等非常方便。

可是當測試人員在測試項目中的文件下載時,就報了一個奇怪的錯誤,class path resource  xxxxxx  cannot be resolved to URL because it does not exist。大意就是說

某個路徑下的資源文件不存在,下載的是模板excel文件,項目中就直接把它放在resources路徑下,在該路徑下又創建了一個目錄用於統一存放模板。測試人員提BUG

后,我們開發就得想辦法解決,一步一步排查問題,分析問題,解決問題。


二、問題分析

  首先確定一點,將項目打成war包時都是好好的,可以正常下載。現在打成jar包進行發布,怎么突然就不行了呢?於是我找到該段代碼進行分析,如下:

 

 

 最開始寫文件下載那個人,是使用一個統一的方法進行下載,首先將需要下載的模板文件信息統一配置在配置文件當中。

 

 

 使用一個配置類統一的進行讀取,頁面中需要下載什么模板時,只需要傳入對應的類型即可,這樣操作很方便,並且可以動態配置。可是在讀取的時候處理

方式有些特別,首先是通過類 ClassPathResource 類進行讀取,然后將讀取到的內容轉換為一個File文件,在將這個文件轉換為字節數組,響應給前端。看到

這里時我認為這種操作有些多余,並且在看了好幾篇博客后,嘗試着進行更改代碼。


三、解決方案

  改動的方式為讀取文件的方式還是一樣,只是不在做復雜的轉換,讀取到文件內容后,直接獲取其輸入流,然后將輸入流轉換為字節流即可。

InputStream is = resource.getInputStream();

byte[] outBytes = IOUtils.toByteArray(is);

只改動這兩句,修改完后重寫打包測試,問題解決。由此可以判斷,問題就出在將獲取的文件內容轉換為文件,然后在將文件轉換為字節數組這步操作。

參考文章一

https://www.jianshu.com/p/7d7e5e4e8ae3

參看文章二

https://www.cnblogs.com/suizhikuo/p/13413738.html

參考文章三

https://blog.csdn.net/qq_34896199/article/details/107082991


免責聲明!

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



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