SpringBoot項目打包成jar后,使用ClassPathResource獲取classpath下文件失敗


SpringBoot項目打包成jar后讀取文件的大坑,使用ClassPathResource獲取classpath下文件失敗

在項目中使用ClassPathResource中獲取資源文件,在本地環境可以正常訪問獲取到文件,然后打包部署到測試環境后卻報錯不能找到給資源文件,報錯信息如下:

image-20211227131153028

解決方法:使用PathMatchingResourcePatternResolver獲取資源文件,不使用classPathResource

ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
      org.springframework.core.io.Resource[] resources = resolver.getResources("/static/signature.png");
      InputStream inputStream = resources[0].getInputStream();
	//file文件轉換成MultipartFile文件
      MultipartFile multipartFile = new MockMultipartFile("file", "signature.png", "text/plain", IOUtils.toByteArray(inputStream));

原因:

image-20211227131904968

因為resourceUrl.getProtocol()不是file,而是 jar,這樣就拋出了一個FileNotFoundException異常。

ResouceUtils.getFile()是專門用來加載非壓縮和Jar包文件類型的資源,所以它根本不會去嘗試加載Jar中的文件,要想加載Jar中的文件,只要用可以讀取jar中文件的方式加載即可,比如 xx.class.getClassLoader().getResouceAsStream()這種以流的形式讀取文件的方式,所以使用讀取文件流就可以拿到了。

參考文檔:https://www.renfei.net/posts/1003293


免責聲明!

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



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