官术网_书友最值得收藏!

4.3 文件上傳

Spring MVC對文件上傳做了簡化,在Spring Boot中對此做了更進一步的簡化,文件上傳更為方便。

Java中的文件上傳一共涉及兩個組件,一個是CommonsMultipartResolver,另一個是StandardServletMultipartResolver,其中CommonsMultipartResolver使用commons-fileupload來處理multipart請求,而StandardServletMultipartResolver則是基于Servlet 3.0來處理multipart請求的,因此若使用StandardServletMultipartResolver,則不需要添加額外的jar包。Tomcat 7.0開始就支持Servlet 3.0了,而Spring Boot 2.0.4內嵌的Tomcat為Tomcat 8.5.32,因此可以直接使用StandardServletMultipartResolver。而在Spring Boot提供的文件上傳自動化配置類MultipartAutoConfiguration中,默認也是采用StandardServletMultipartResolver,部分源碼如下:

根據這里的配置可以看出,如果開發者沒有提供MultipartResolver,那么默認采用的MultipartResolver就是StandardServletMultipartResolver。因此,在Spring Boot中上傳文件甚至可以做到零配置。下面來看具體上傳過程。

4.3.1 單文件上傳

首先創建一個Spring Boot項目并添加spring-boot-starter-web依賴。

然后在resources目錄下的static目錄中創建一個upload.html文件,內容如下:

這是一個很簡單的文件上傳頁面,上傳接口是/upload,注意請求方法是post,enctype是multipart/form-data。

接著創建文件上傳處理接口,代碼如下:

代碼解釋:


? 第6~12代碼表示規劃上傳文件的保存路徑為項目運行目錄下的uploadFile文件夾,并在文件夾中通過日期對所上傳的文件歸類保存。

? 第13~15行代碼表示給上傳的文件重命名,這是為了避免文件重名。

? 第17行是文件保存操作。

? 第18~20行是生成上傳文件的訪問路徑,并將訪問路徑返回。


最后在瀏覽器中進行測試。

運行項目,在瀏覽器中輸入“http://localhost:8080/upload.html”進行文件上傳,如圖4-5所示。

圖4-5

單擊“請選擇文件”按鈕上傳文件,文件上傳成功后,會返回上傳文件的訪問路徑,如圖4-6所示。

圖4-6

用這個路徑就可以看到剛剛上傳的圖片,如圖4-7所示。

圖4-7

在4.2節中向讀者介紹過靜態資源位置除了classpath下面的4個路徑之外,還有一個" /",因此這里的圖片雖然是靜態資源卻可以直接訪問到。

至此,一個簡單的圖片上傳邏輯就完成了,對于開發者而言,只需要專注于圖片上傳的業務邏輯,而不需要在配置上花費太多時間。

當然,如果開發者需要對圖片上傳的細節進行配置,也是允許的,代碼如下:

代碼解釋:


? 第1行表示是否開啟文件上傳支持,默認為true。

? 第2行表示文件寫入磁盤的閾值,默認為0。

? 第3行表示上傳文件的臨時保存位置。

? 第4行表示上傳的單個文件的最大大小,默認為1MB。

? 第5行表示多文件上傳時文件的總大小,默認為10MB。

? 第6行表示文件是否延遲解析,默認為false。

4.3.2 多文件上傳

多文件上傳和單文件上傳基本一致,首先修改HTML文件,代碼如下:

然后修改控制器,代碼如下:

控制器里邊的核心邏輯和單文件上傳是一樣的,只是多一個遍歷的步驟。

主站蜘蛛池模板: 略阳县| 巩留县| 安义县| 长春市| 南岸区| 芷江| 怀远县| 吴旗县| 高尔夫| 长乐市| 陆良县| 武宣县| 登封市| 绵竹市| 渭南市| 玉溪市| 汝城县| 井冈山市| 定远县| 方正县| 高邑县| 杂多县| 剑河县| 兰州市| 县级市| 安塞县| 辉县市| 开平市| 罗山县| 敖汉旗| 郯城县| 泉州市| 青铜峡市| 武宁县| 铜川市| 安徽省| 峨眉山市| 昌乐县| 阿坝县| 怀远县| 松溪县|