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


前言

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

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

正文:

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 這個路徑,也就實現了我們訪問相對路徑映射到絕對路徑上去。

需要注意的是:如果文件名是中文名,為了避免亂碼,請在Connector標簽內添加URIEncoding=“UTF-8” 進行編碼集設置。

3. 測試

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

當我們上傳完成之后,得到的路徑是: D:\file\picture\20180828083720.png。那么我們存入數據庫這張圖片的路徑是什么呢??

如果存入: D:\file\picture\20180828083720.png,那么你肯定是訪問不到的,因為請求的路徑肯定是 http://xxx.xxx.xx.xx:8080/xxx/xxx.png,這樣的路徑肯定無法訪問絕對路徑,所以我們必須要映射虛擬路徑。

映射完之后,直接在網址上輸入:http://localhost:8080/file/fileUpload/20180828083720.png,那么默認訪問的就是http://localhost:8080 這台電腦下的 D:\file\picture下的20180828083720.png。是可以訪問到的,如下:

由此可見是可以訪問到的。如果我們在網頁中呢?只需要將src設置為虛擬路徑,然后加上文件名即可。

 

所以:如果我們要存儲路徑的時候,就需要將絕對路徑更改為相對路徑,然后存入數據庫,當我們前台拿到路徑之后訪問,映射的就是絕對路徑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM