1. 程式人生 > >springboot打成jar包後配置外部資源對映成靜態資源

springboot打成jar包後配置外部資源對映成靜態資源

很多的專案都要上傳圖片那些,然後通過打包jar包或者war包釋出到伺服器上,我們不可能把上傳圖片的資料夾放在jar包或者war包裡面,那樣會越來越大。所以有了下面的配置,其他框架都好說可以把檔案放在tomact下,但是springboot專案是內建tomact所以會有一點的小麻煩。

如果你的專案只要在本地上執行可以參考:https://blog.csdn.net/duangecho/article/details/80099810

如果你的專案要打成jar包放到伺服器上請參考如下

進入主題,配置如下:

在springboot專案中的application.properties配置檔案下,我們通常會規定一個tomact的虛擬路徑,如下:

server.tomcat.basedir=logistics/tomcat 此虛擬路徑會在你把springboot專案打成jar包執行後在你的jar包同級目錄下產生一個logistics目錄。所以我把我要上傳的檔案的全部放在這個資料夾目錄下

springboot專案打包的jar包                                                        

在logistics檔案放入你要上傳圖片的的資料夾

這是我要上傳檔案的一些資料夾

然後在springboot啟動類中新增過濾器,這裡自己踩了很多坑,一遍一遍重新打jar,然後執行,網上許多的配置大多隻能新增一個固定的檔案路徑然後對映成靜態資源路徑:

public class DemoSpringbootWebApplication extends WebMvcConfigurerAdapter{

   @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {       File path = null;       try {          path = new File(ResourceUtils.getURL("classpath:").getPath());       } catch (FileNotFoundException e) {          e.printStackTrace();       }       String gitPath=path.getParentFile().getParentFile().getParent()+File.separator+"logistics"+File.separator+"uploads"+File.separator;       registry.addResourceHandler("/uploads/**").addResourceLocations(gitPath);       registry.addResourceHandler("/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");       super.addResourceHandlers(registry);    }

   public static void main(String[] args) {       SpringApplication.run(DemoSpringbootWebApplication.class, args);    } } 這裡是獲取你放專案jar的路徑,這有個很大的漏洞就是你專案在你開發工具上執行時和你打成jar包的獲取路徑不同,在專案上執行時不用返回兩次父級目錄,而打成jar包執行後獲取的jar包的路徑要如下的方法,並且打成jar包後獲取的根目錄會在目錄前面加上file:/你專案的路徑

String gitPath=path.getParentFile().getParentFile().getParent()+File.separator+"logistics"+File.separator+"uploads"+File.separator; 這裡是對映外部檔案的程式碼:

registry.addResourceHandler("/uploads/**").addResourceLocations(gitPath); 這裡是對映你專案的靜態資源的: registry.addResourceHandler("/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/"); 這裡需要注意兩個對映的訪問路徑不能相同我就是在這裡改了很久。

其實這裡就是專案啟動時獲取jar包的絕對路徑,請注意是絕對路徑,然後通過拼接形式訪問到你存放檔案的目錄。可能不同的專案獲取檔案路徑有差異但是都是這個原理:取得你存放檔案的絕對路徑然後對映成靜態資源,要多嘗試幾次才會成功。

然後把你的springboot專案打成jar,流程如下:

1.開啟maven project

2.點選那個m的圖示,輸入如下程式碼

3.然後會在你專案的target中生成jar包:

然後你可以把你的專案放到任何資料夾下面然後開啟cmd進入到你對應的資料夾下輸入:java -jar 你的jar的名稱

然後會在你的jar包的同級目錄下生成你配置檔案中配置的一個虛擬目錄,把你的檔案放在你下面,上面有說過。

然後通過網址:http://localhost/uploads/image/1525849564604.gif 就會訪問到你的那些圖片什麼亂七八糟的。 ---------------------