springboot重寫適配器addResourceHandler 虛擬路徑映射文件磁盤路徑 讀取磁盤文件 預覽文件

文件上傳的功能很常見,但是很多人並不清楚文件上傳後預覽的具體原理,也就是把上傳至服務器指定物理磁盤相關目錄(絕對路徑)的文件通過瀏覽器直接訪問預覽。這種具體實現其實是要配置一個映射關係的,即配置一個虛擬路徑來映射文件的真實絕對路徑(完美的隱藏了文件的真實物理路徑,可以說不但很安全,而且外網可以直接訪問)。

配置虛擬路徑映射物理路徑常規二種方式

方式一:在tomcat的tomcat-7.0.39/conf/Catalina/localhost/目錄配置一個xml文件,該xml文件裏配置物理路徑和虛擬路徑的映射關係,同時該xml文件的名字須定義爲要映射的虛擬路徑即可。該種方式很簡單,此處不再贅述。

方式二:在項目中增加適配器配置類,在該配置類中定義虛擬路徑和真實的物理路徑的映射關係即可。該種方式因不同的框架實現不一樣,本案例通過主流的springboot講解該配置以及具體應用。

具體實現:首先在本地磁盤目錄放置一個圖片文件,目錄如下

D:\uploadBaseDir\productPic\20190215\100×100\8e67898584e140c9b39a203a167f58fe.png

接下來在項目裏定義一個適配器配置類ResourceConfigAdapter繼承WebMvcConfigurerAdapter,注意這裏要動態的獲取操作系統,根據不同的操作系統適配不同的映射關係,也很好理解,windows系統有C/D盤這個概念(真實的物理磁盤路徑),linux和mac系統沒有這個概念,都是相對路徑。

package com.demo.serverProvider.config;

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

/**
 * 創建時間:2019年2月15日 下午1:52:49
 * 項目名稱:server-provider
 * 類說明:將物理磁盤文件存放的絕對路徑映射爲一個虛擬路徑,就可以通過SpringBoot服務來訪問文件了
 * @author guobinhui
 * @since JDK 1.8.0_51
 */
@Configuration
public class ResourceConfigAdapter extends WebMvcConfigurerAdapter{

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
     String os = System.getProperty("os.name");
     if (os.toLowerCase().startsWith("win")) {  //如果是Windows系統
        registry.addResourceHandler("/productPic/**").
          addResourceLocations("file:D:/uploadBaseDir/productPic/");
     }else{//linux和mac系統
        registry.addResourceHandler("/productPic/**").
          addResourceLocations("file:/uploadBaseDir/productPic/");
     }
     super.addResourceHandlers(registry);
   }
}

最終圖片上傳結束在數據庫裏保存存儲的相對路徑即可,本圖片保存的路徑如爲:/uploadBaseDir/productPic/20190215/100×100/8e67898584e140c9b39a203a167f58fe.png

最終測試剛纔這個圖片的預覽(可以看到真實物理路徑D:/uploadBaseDir/productPic/映射爲指定的虛擬路徑/productPic/了)

歡迎各位開發者朋友一起交流。筆者電話(微信):18629374628 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章