springboot項目文件上傳(絕對路徑)並使用tomcat虛擬路徑進行圖片預覽

前言

項目中,須要上傳文件,可是可能會比較多,因此不能放入項目目錄中,須要指定目錄並按順序放置。而且:還須要這些數據能夠預覽(圖片等)。數據庫

那麼問題就是:上傳完成以後我存入服務器,並拿到絕對路徑,存入數據庫,那麼,前臺訪問的時候請求地址確定是:ip+端口+項目名,那麼該如何獲取資源呢?tomcat

正文:

1. 文件上傳到指定目錄(服務器絕對路徑,按天存放)

if (file.isEmpty()){ logger.error("文件爲空"); } String filename = file.getOriginalFilename();   //校驗文件名
        String contentType = file.getContentType();     //校驗文件類型
        long size = file.getSize();                     //校驗文件大小
        logger.info("文件名:{},文件的類型:{},文件的大小:{}", filename,contentType,size); try { //restorePath存儲目錄,在配置文件中存儲,經過@value拿到。
            File parentPath = new File(restorePath + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE)); if (!parentPath.exists()){ parentPath.mkdir(); //判斷父路徑是否存在,不存在就建立出來
 } File newFile = new File(parentPath , filename); file.transferTo(newFile); //複製文件
            String resultPath = newFile.getPath(); logger.info("上傳文成,文件路徑爲:" + resultPath); } catch (IOException e) { e.printStackTrace(); }
View Code

2. 在tomcat中配置虛擬路徑,指向配置的絕對路徑。

有這麼一種方案:在tomcat中,咱們能夠配置一個虛擬路徑,當訪問指定虛擬路徑的時候,就訪問咱們指定的那麼路徑,這樣就能夠映射相對路徑到絕對路徑上去。以下:服務器

<Context path="/file/fileUpload" docBase="D:\file\picture" reloadable="true"></Context>

當咱們訪問  localhost:8080//file/fileUpload 的時候,咱們會默認訪問 D:\file\picture 這個路徑,也就實現了咱們訪問相對路徑映射到絕對路徑上去。ide

須要注意的是:若是文件名是中文名,爲了不亂碼,請在Connector標籤內添加URIEncoding=「UTF-8」 進行編碼集設置。測試

3. 測試

咱們在文件絕對路徑下放置一個圖片:編碼

當咱們上傳完成以後,獲得的路徑是: D:\file\picture\20180828083720.png。那麼咱們存入數據庫這張圖片的路徑是什麼呢??spa

若是存入: D:\file\picture\20180828083720.png,那麼你確定是訪問不到的,由於請求的路徑確定是 http://xxx.xxx.xx.xx:8080/xxx/xxx.png,這樣的路徑確定沒法訪問絕對路徑,因此咱們必需要映射虛擬路徑。3d

映射完以後,直接在網址上輸入:http://localhost:8080/file/fileUpload/20180828083720.png,那麼默認訪問的就是http://localhost:8080 這臺電腦下的 D:\file\picture下的20180828083720.png。是能夠訪問到的,以下:rest

因而可知是能夠訪問到的。若是咱們在網頁中呢?只須要將src設置爲虛擬路徑,而後加上文件名便可。code

 

因此:若是咱們要存儲路徑的時候,就須要將絕對路徑更改成相對路徑,而後存入數據庫,當咱們前臺拿到路徑以後訪問,映射的就是絕對路徑。

相關文章
相關標籤/搜索