在筆者的上一篇文章介紹過怎么通過linux的軟連接在不修改上傳代碼的情況下,將上傳到項目路徑下的圖片改為上傳到項目外面,防止重新部署后圖片被刪除了。同時還可以直接通過類似訪問靜態資源的方式訪問圖片。但是,筆者發現一個問題;如果運維人員在重新部署后忘記做軟連接,那么圖片就上傳到項目路徑下了。如果再重新部署,這部分圖片就丟失,這就是一個bug。
為了解決這個文件丟失問題,我們將圖片上傳到一個項目外面的絕對路徑,這樣就不會在忘記做軟連接的時候丟失了。對於怎么訪問這個文件呢,還是和上一篇文章一樣,做個軟連接就可以。
下面通過一個案例來解釋下
一、實戰案例
(1)上傳代碼
這個上傳沒啥說的,只不過是要上傳到一個絕對路徑下面。比如我們原來是上傳到項目的/images/packing/下;
現在我們在tomcat外面建一個文件夾,如:/home/tomtop1927/test/ 這樣這個test就相當於我們的原來項目根目錄了。在我們上傳完之后,圖片的真實地址類似於:/home/tomtop1927/test/images/packing/100_abc.jpg 。

其實這個絕對地址是不應該寫死的,最好是通過properties去讀取最好。對於上傳的代碼就不介紹了。
(2)建立軟連接
注意:現在test文件夾下面沒有imges這個文件夾,可以先自己手動建立一個,然后再進入我們項目路徑建立軟連接。

其實這個建立軟連接和上一篇文章是一樣的,沒什么區別,之所以介紹就是這步比較重要。
(3)tomcat配置開啟軟連接
怎么開啟不介紹,見上一篇文章。筆者用的tomcat8,所以con/context.xml配置<Resources allowLinking="true"/>
(4)完成
通過上面的3步就完成了,我們把圖片上傳到了項目外面的一個絕對路徑上,這樣假設運維人員忘記配置軟連接,上傳也不受影響。就是訪問這文件的時候受影響,當訪問不了的時候,運維人員配置個軟連接就ok了。總之保證了文件不丟失。
二、對比
這里的對比是和我上一篇博客介紹的軟連接的對比
(1)上一篇博客中上傳代碼是完全就和上傳到項目根目錄下的代碼一樣。而本次上傳的代碼需要把圖片存的位置的真實的絕對路徑給寫到代碼中。
(2)除了上面說的代碼不一樣外,其他操作均一樣。
(3)本篇博客介紹的這方案的優點是:上傳永遠不會出問題,即使忘記軟連接,也還是上傳到放文件的地方。
缺點是:這個絕對路徑得寫到代碼里,雖然可以通過配置properties的方式來解耦,但是變更路徑時需要運維人員去修改。