- Spring Boot+Vue全棧開發實戰
- 王松
- 963字
- 2020-06-30 17:14:46
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文件,代碼如下:

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

控制器里邊的核心邏輯和單文件上傳是一樣的,只是多一個遍歷的步驟。
- 計算思維與算法入門
- 流量的秘密:Google Analytics網站分析與優化技巧(第2版)
- Learning ROS for Robotics Programming(Second Edition)
- Visual Basic 6.0程序設計計算機組裝與維修
- Arduino by Example
- 跟老齊學Python:輕松入門
- oreilly精品圖書:軟件開發者路線圖叢書(共8冊)
- Python漫游數學王國:高等數學、線性代數、數理統計及運籌學
- Learning Network Forensics
- HTML5入門經典
- 響應式Web設計:HTML5和CSS3實戰(第2版)
- Unity 3D腳本編程:使用C#語言開發跨平臺游戲
- .NET 4.5 Parallel Extensions Cookbook
- 運維前線:一線運維專家的運維方法、技巧與實踐
- Go語言開發實戰(慕課版)