在企業(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所示:
我們下面配置application.properties文件支持JSP頁(yè)面的訪問(wèn),配置preffix以及suffix路徑轉(zhuǎn)發(fā)規(guī)則,如下圖2所示:
配置完成后我們?cè)谝来蝿?chuàng)建目錄/main/webapp/WEB-INF/jsp,結(jié)構(gòu)如下圖3所示:
我們?cè)趈sp目錄下創(chuàng)建一個(gè)index.jsp,jsp內(nèi)我們添加一個(gè)簡(jiǎn)單的form表單,并且修改enctype="multipart/form-data",index.jsp代碼如下圖4所示:
jsp編寫完成后我們需要讓springboot內(nèi)的SpringMVC轉(zhuǎn)發(fā)到index.jsp頁(yè)面,我們創(chuàng)建一個(gè)名叫做UploadController的控制器,添加初始化index.jsp頁(yè)面方法以及上傳文件的方法/upload,代碼如下圖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所示:
可以看大我們直接將上傳的文件保存到項(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所示:
我們可以成功的訪問(wèn)到文件上傳的界面,那么我們選擇一個(gè)圖片測(cè)試下上傳效果,如下圖8、9所示:
我們選擇了一個(gè)圖片文件,點(diǎn)擊“提交上傳”按鈕后,提示我們“上傳成功”的字樣,那么我們上傳的文件在什么地方呢?我們打開項(xiàng)目展開webapp目錄可以看到多了一個(gè)upload文件夾,upload內(nèi)就是我們剛才上傳的圖片文件,結(jié)構(gòu)如下圖10所示:
自定義文件名
一般情況下我們不會(huì)使用上傳時(shí)文件的名字作為存儲(chǔ)在服務(wù)器端的名字,一般都會(huì)采用UUID或者時(shí)間戳的形式來(lái)保存,下面我們修改下代碼使用UUID來(lái)作為文件名稱,修改代碼如下圖11所示:
我們重啟項(xiàng)目再次執(zhí)行上傳操作后,看下upload文件夾的效果,圖下圖12所示:
可以看到我們新創(chuàng)建的文件名稱就是采用了隨機(jī)UUID的形式命名的,還有一種使用時(shí)間戳,一般都是微毫秒作為文件名,這里不做解釋了,(微毫秒獲取方式:System.nanoTime())。
多文件上傳
上面單個(gè)文件已經(jīng)是可以上傳成功了,那么我們來(lái)講解下多個(gè)文件上傳。
修改JSP界面
我們對(duì)index.jsp做出簡(jiǎn)單的修改,在下面添加一個(gè)多文件上傳的表單,如下圖13所示:
添加多文件上傳方法
我們轉(zhuǎn)到UploadController控制器,添加/uploads方法,并提取單個(gè)上傳文件的方法為公共方法,公共方法代碼如下圖14所示:
添加多個(gè)文件上傳的方法如下圖15所示:
我們多個(gè)文件的配置也已經(jīng)完成,下面我們重啟下項(xiàng)目,測(cè)試多個(gè)文件上傳功能。
測(cè)試多文件上傳
項(xiàng)目啟動(dòng)完成后,還是訪問(wèn)127.0.0.1:8080/index,界面展示效果如下圖16所示:
下面的表單就是我們后來(lái)添加的,我們選擇多個(gè)文件并提交表單驗(yàn)證下效果,如下圖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所示:
我們修改了上傳文件的最大限制容量為1024Mb也就是1GB,最大的請(qǐng)求容量為2048Mb也就是2GB,那么我們重啟下項(xiàng)目再來(lái)測(cè)試上傳剛才的文件,效果如下圖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í)星球 - 恒宇少年