1. 程式人生 > >靜態資源的虛擬路徑和獨立靜態資源管理系統的實現

靜態資源的虛擬路徑和獨立靜態資源管理系統的實現

一、什麼是虛擬路徑?

        舉個例子:上傳一張圖片放到:D://group/29015054169244_投影.png

                          但是前臺訪問是這樣的:http://ip:port/image/29015054169244_投影.png

        顯然這種訪問方式,應該是在tomcat下的專案靜態資原始檔夾下了,但是圖片不在那裡存放,為什麼能訪問到?

        這就是虛擬路徑的作用了。

二、為什麼需要虛擬路徑?

        1、業務資料(資源)與程式碼分離,防止碟符不夠或者後續修改重新部署等丟失;

        2、當專案被打包成一個.jar檔案部署時,再將上傳的檔案放到這個.jar檔案中是有多麼低的效率;

        3、網站資料的備份將會很痛苦。

三、虛擬路徑的配置:

1、tomcat 配置方式:con/server.xml (docBase就是實際的路徑,path是虛擬路徑,相當於把改路徑對映到伺服器中)

  <!-- 設定圖片虛擬路徑[訪問時路徑為/image] -->  
         <Context path="/image" docBase="D:\group" reloadable="true" /> 

2、springboot 配置方式:

2-1、配置類:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

/** * 圖片絕對地址與虛擬地址對映 */
 @Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {   

@Override  
public void addResourceHandlers(ResourceHandlerRegistry registry) {
   //檔案磁碟圖片url 對映
   //配置server虛擬路徑,handler為前臺訪問的目錄,locations為files相對應的本地路徑
   registry.addResourceHandler("/image/**").addResourceLocations("file:///D:/group/");  } 
}

  2-2、 另一種直接在配置檔案application.properties配置方式(這種是把專案下所有的靜態資源訪問對映到D:/group/下):

其中upload.download.path:自定義的屬性,指定了一個路徑,注意要以/結尾;

  spring.mvc.static-path-pattern=/**表示所有的訪問都經過靜態資源路徑;

  spring.resources.static-locations在這裡配置靜態資源路徑,覆蓋預設配置,所以需要將預設的也加上,否則staticpublic等這些路徑將不能被當作靜態資源路徑,在這個最末尾的file:${upload.download.path}之所有要加file:是因為指定的是一個具體的硬碟路徑,其他的使用classpath指的是系統環境變數。

server.port=1122

upload.download.path=D:/group/

spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${upload.download.path}

3、eclipse下配置:(參考網上的留著做參考用,未經驗證。。)

四、獨立靜態資源管理系統的實現(通過資料流來讀取圖片

1、系統中需要用到大量的圖片和其他靜態檔案資源,考慮靜態資源的統一管理和伺服器效能(靜態資源快取等等,後話暫時不提),需要和restfulAPI介面分開,於是有了這個獨立的靜態資源管理系統(實際專案中是獨立於其他介面的,也是獨立分配了伺服器部署的。)

2、比如上傳一張圖片,會自動根據型別和分組情況放到預先配置好的路徑下,新的分組會新建資料夾存放,然後把型別和分組和圖片名稱一起存入資料庫待用。

       訪問這張圖片:*/downloadImgOrVideo.do?type=12&path=group1/29015054169244_投影.png

      客戶端並不知道圖片的真實存放位置,但是可以把型別和“分組路徑”發給服務端,服務端根據兩者資訊,去配置好的實際路徑下尋找這個圖片。