第十一章:實(shí)現(xiàn)SpringBoot單個(gè)、多個(gè)文件的上傳

在企業(yè)級(jí)項(xiàng)目開發(fā)過(guò)程中,上傳文件是最常用到的功能。SpringBoot集成了SpringMVC,當(dāng)然上傳文件的方式跟SpringMVC沒(méi)有什么出入。下面我們來(lái)創(chuàng)建一個(gè)SpringBoot項(xiàng)目完成單個(gè)、多個(gè)文件的上傳。

免費(fèi)專題文章匯總

恒宇少年在博客整理出來(lái)了SpringBoot、ApiBoot、SpringCloud的文章匯總【SpringBoot基礎(chǔ)教程專題】,【SpringCloud基礎(chǔ)教程專題】,【ApiBoot組件使用專題

本章目標(biāo)

使用SpringBoot項(xiàng)目完成單個(gè)、多個(gè)文件的上傳處理,并將上傳的文件保存到指定目錄下。

構(gòu)建項(xiàng)目

我們使用InteiilJ IDEA工具構(gòu)建一個(gè)SpringBoot項(xiàng)目,項(xiàng)目先加入Web、JSP、Servlet依賴等,項(xiàng)目結(jié)構(gòu)如下圖1所示:

圖1

我們下面配置application.properties文件支持JSP頁(yè)面的訪問(wèn),配置preffix以及suffix路徑轉(zhuǎn)發(fā)規(guī)則,如下圖2所示:

圖2

配置完成后我們?cè)谝来蝿?chuàng)建目錄/main/webapp/WEB-INF/jsp,結(jié)構(gòu)如下圖3所示:

圖3

我們?cè)趈sp目錄下創(chuàng)建一個(gè)index.jsp,jsp內(nèi)我們添加一個(gè)簡(jiǎn)單的form表單,并且修改enctype="multipart/form-data",index.jsp代碼如下圖4所示:

圖4

jsp編寫完成后我們需要讓springboot內(nèi)的SpringMVC轉(zhuǎn)發(fā)到index.jsp頁(yè)面,我們創(chuàng)建一個(gè)名叫做UploadController的控制器,添加初始化index.jsp頁(yè)面方法以及上傳文件的方法/upload,代碼如下圖5所示:

圖5

當(dāng)我們?cè)L問(wèn)http://127.0.0.1:8080/index地址時(shí)SpringBoot就會(huì)根據(jù)我們的application.properties配置自動(dòng)定位到/webapp/WEB-INF/jsp/index.jsp,下面我們來(lái)編寫/upload方法內(nèi)的具體實(shí)現(xiàn)。

單個(gè)文件上傳

我們使用MultipartFile對(duì)象內(nèi)置的方法transferTo()就可以實(shí)現(xiàn)JSP頁(yè)面上傳到request內(nèi)的文件對(duì)象直接存儲(chǔ)到指定文件File對(duì)象內(nèi),以此來(lái)完成上傳文件的存儲(chǔ)。上傳單個(gè)文件代碼實(shí)現(xiàn)如下圖6所示:

圖6

可以看大我們直接將上傳的文件保存到項(xiàng)目的運(yùn)行目錄下的/upload文件夾內(nèi)。我們來(lái)嘗試運(yùn)行下項(xiàng)目。

測(cè)試單文件上傳

我們使用SpringBootApplication運(yùn)行項(xiàng)目后,控制臺(tái)打印日志并沒(méi)有什么異常,訪問(wèn)127.0.0.1:8080/index看下效果,如下圖7所示:

圖7

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

圖8
圖9

我們選擇了一個(gè)圖片文件,點(diǎn)擊“提交上傳”按鈕后,提示我們“上傳成功”的字樣,那么我們上傳的文件在什么地方呢?我們打開項(xiàng)目展開webapp目錄可以看到多了一個(gè)upload文件夾,upload內(nèi)就是我們剛才上傳的圖片文件,結(jié)構(gòu)如下圖10所示:

圖10

自定義文件名

一般情況下我們不會(huì)使用上傳時(shí)文件的名字作為存儲(chǔ)在服務(wù)器端的名字,一般都會(huì)采用UUID或者時(shí)間戳的形式來(lái)保存,下面我們修改下代碼使用UUID來(lái)作為文件名稱,修改代碼如下圖11所示:

圖11

我們重啟項(xiàng)目再次執(zhí)行上傳操作后,看下upload文件夾的效果,圖下圖12所示:

圖12

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

多文件上傳

上面單個(gè)文件已經(jīng)是可以上傳成功了,那么我們來(lái)講解下多個(gè)文件上傳。

修改JSP界面

我們對(duì)index.jsp做出簡(jiǎn)單的修改,在下面添加一個(gè)多文件上傳的表單,如下圖13所示:

圖13

添加多文件上傳方法

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

圖14

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

圖15

我們多個(gè)文件的配置也已經(jīng)完成,下面我們重啟下項(xiàng)目,測(cè)試多個(gè)文件上傳功能。

測(cè)試多文件上傳

項(xiàng)目啟動(dòng)完成后,還是訪問(wèn)127.0.0.1:8080/index,界面展示效果如下圖16所示:

圖16

下面的表單就是我們后來(lái)添加的,我們選擇多個(gè)文件并提交表單驗(yàn)證下效果,如下圖17、18所示:

圖17
圖18

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

修改上傳限制

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

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

圖19

我們修改了上傳文件的最大限制容量為1024Mb也就是1GB,最大的請(qǐng)求容量為2048Mb也就是2GB,那么我們重啟下項(xiàng)目再來(lái)測(cè)試上傳剛才的文件,效果如下圖20、21所示:

圖20
圖21

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

總結(jié)

以上內(nèi)容就是本章的全部講解,本章主要講解了SringBoot項(xiàng)目如何上傳單個(gè)、多個(gè)文件到服務(wù)器端指定目錄下,上傳時(shí)修改限制上傳文件容量大小,上傳文件的命名規(guī)則等。

本章內(nèi)容已經(jīng)上傳到碼云:

SpringBoot配套源碼地址:https://gitee.com/hengboy/spring-boot-chapter

SpringCloud配套源碼地址:https://gitee.com/hengboy/spring-cloud-chapter

SpringBoot相關(guān)系列文章請(qǐng)?jiān)L問(wèn):目錄:SpringBoot學(xué)習(xí)目錄

QueryDSL相關(guān)系列文章請(qǐng)?jiān)L問(wèn):QueryDSL通用查詢框架學(xué)習(xí)目錄

SpringDataJPA相關(guān)系列文章請(qǐng)?jiān)L問(wèn):目錄:SpringDataJPA學(xué)習(xí)目錄

SpringBoot相關(guān)文章請(qǐng)?jiān)L問(wèn):目錄:SpringBoot學(xué)習(xí)目錄,感謝閱讀!

歡迎微信掃碼加入知識(shí)星球,恒宇少年帶你走以后的技術(shù)道路!!!

知識(shí)星球 - 恒宇少年

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容