16:實現SpringBoot單個、多個文件的上傳

在企業級項目開發過程中,上傳文件是最常用到的功能。SpringBoot集成了SpringMVC,當然上傳文件的方式跟SpringMVC沒有什麼出入。下面我們來創建一個SpringBoot項目完成單個、多個文件的上傳。
16:實現SpringBoot單個、多個文件的上傳


本章目標

使用SpringBoot項目完成單個、多個文件的上傳處理,並將上傳的文件保存到指定目錄下。

構建項目

我們使用InteiilJ IDEA工具構建一個SpringBoot項目,項目先加入Web、JSP、Servlet依賴等,項目結構如下圖1所示:

16:實現SpringBoot單個、多個文件的上傳

圖1

我們下面配置application.properties文件支持JSP頁面的訪問,配置preffix以及suffix路徑轉發規則,如下圖2所示:

16:實現SpringBoot單個、多個文件的上傳

圖2

配置完成後我們在依次創建目錄/main/webapp/WEB-INF/jsp,結構如下圖3所示:

16:實現SpringBoot單個、多個文件的上傳

圖3

我們在jsp目錄下創建一個index.jsp,jsp內我們添加一個簡單的form表單,並且修改enctype="multipart/form-data",index.jsp代碼如下圖4所示:

16:實現SpringBoot單個、多個文件的上傳

圖4

jsp編寫完成後我們需要讓springboot內的SpringMVC轉發到index.jsp頁面,我們創建一個名叫做UploadController的控制器,添加初始化index.jsp頁面方法以及上傳文件的方法/upload,代碼如下圖5所示:

16:實現SpringBoot單個、多個文件的上傳

圖5

當我們訪問http://127.0.0.1:8080/index地址時SpringBoot就會根據我們的application.properties配置自動定位到/webapp/WEB-INF/jsp/index.jsp,下面我們來編寫/upload方法內的具體實現。

單個文件上傳

我們使用MultipartFile對象內置的方法transferTo()就可以實現JSP頁面上傳到request內的文件對象直接存儲到指定文件File對象內,以此來完成上傳文件的存儲。上傳單個文件代碼實現如下圖6所示:

16:實現SpringBoot單個、多個文件的上傳

圖6

可以看大我們直接將上傳的文件保存到項目的運行目錄下的/upload文件夾內。我們來嘗試運行下項目。

測試單文件上傳

我們使用SpringBootApplication運行項目後,控制檯打印日誌並沒有什麼異常,訪問127.0.0.1:8080/index看下效果,如下圖7所示:

16:實現SpringBoot單個、多個文件的上傳

圖7

我們可以成功的訪問到文件上傳的界面,那麼我們選擇一個圖片測試下上傳效果,如下圖8、9所示:

16:實現SpringBoot單個、多個文件的上傳

圖8

16:實現SpringBoot單個、多個文件的上傳

圖9

我們選擇了一個圖片文件,點擊“提交上傳”按鈕後,提示我們“上傳成功”的字樣,那麼我們上傳的文件在什麼地方呢?我們打開項目展開webapp目錄可以看到多了一個upload文件夾,upload內就是我們剛才上傳的圖片文件,結構如下圖10所示:

16:實現SpringBoot單個、多個文件的上傳

圖10

自定義文件名

一般情況下我們不會使用上傳時文件的名字作為存儲在服務器端的名字,一般都會採用UUID或者時間戳的形式來保存,下面我們修改下代碼使用UUID來作為文件名稱,修改代碼如下圖11所示:

16:實現SpringBoot單個、多個文件的上傳

圖11

我們重啟項目再次執行上傳操作後,看下upload文件夾的效果,圖下圖12所示:

16:實現SpringBoot單個、多個文件的上傳

圖12

可以看到我們新創建的文件名稱就是採用了隨機UUID的形式命名的,還有一種使用時間戳,一般都是微毫秒作為文件名,這裡不做解釋了,(微毫秒獲取方式:System.nanoTime())。

多文件上傳

上面單個文件已經是可以上傳成功了,那麼我們來講解下多個文件上傳。

修改JSP界面

我們對index.jsp做出簡單的修改,在下面添加一個多文件上傳的表單,如下圖13所示:

16:實現SpringBoot單個、多個文件的上傳

圖13

添加多文件上傳方法

我們轉到UploadController控制器,添加/uploads方法,並提取單個上傳文件的方法為公共方法,公共方法代碼如下圖14所示:

16:實現SpringBoot單個、多個文件的上傳

圖14

添加多個文件上傳的方法如下圖15所示:

16:實現SpringBoot單個、多個文件的上傳

圖15

我們多個文件的配置也已經完成,下面我們重啟下項目,測試多個文件上傳功能。

測試多文件上傳

項目啟動完成後,還是訪問127.0.0.1:8080/index,界面展示效果如下圖16所示:

16:實現SpringBoot單個、多個文件的上傳

圖16

下面的表單就是我們後來添加的,我們選擇多個文件並提交表單驗證下效果,如下圖17、18所示:

16:實現SpringBoot單個、多個文件的上傳

圖17

16:實現SpringBoot單個、多個文件的上傳

圖18

可以看到我們也是執行上傳成功的提示,那如果我們上傳一個大文件,如何修改SpringBoot的最大上傳限制呢?

修改上傳限制

SpringBoot上傳文件時限制了我們上傳文件最大容量為:1048576 bytes,那我們需要上傳超過配置的文件時修改怎麼做呢?

打開application.properties配置文件,加入spring.http.multipart.max-file-size以及spring.http.multipart.max-request-size配置信息,配置信息如下圖19所示:

16:實現SpringBoot單個、多個文件的上傳

圖19

我們修改了上傳文件的最大限制容量為1024Mb也就是1GB,最大的請求容量為2048Mb也就是2GB,那麼我們重啟下項目再來測試上傳剛才的文件,效果如下圖20、21所示:

16:實現SpringBoot單個、多個文件的上傳

圖20

16:實現SpringBoot單個、多個文件的上傳

圖21

可以看到我們剛才選擇的PDF文檔已經上傳到/upload目錄下了,證明了我們的配置已經生效。

總結

以上內容就是本章的全部講解,本章主要講解了SringBoot項目如何上傳單個、多個文件到服務器端指定目錄下,上傳時修改限制上傳文件容量大小,上傳文件的命名規則等。


本公眾號已開設如下二十大專題,歡迎長按以下二維碼,查看相關專題!

  • 【springboot專題】【spring源碼】
  • 【mysql優化專題】【HTTP協議】
  • 【架構技術專題】【多線程專題】
  • 【dubbo專題】【dubbo源碼專題】
  • 【JVM調優專題】【HTTP專題】
  • 【設計模式專題】【高併發專題】
  • 【架構技術專題】【Lucene專題】
  • 【數據結構專題】【redis專題】
  • 【mq中間件專題】【netty專題】
  • 【java面試專題】【zookeeper】


分享到:


相關文章: