在企業(yè)級項目開發(fā)過程中健盒,上傳文件是最常用到的功能绒瘦。SpringBoot集成了SpringMVC,當(dāng)然上傳文件的方式跟SpringMVC沒有什么出入扣癣。下面我們來創(chuàng)建一個SpringBoot項目完成單個惰帽、多個文件的上傳。
免費專題文章匯總
恒宇少年在博客整理出來了SpringBoot搏色、ApiBoot善茎、SpringCloud的文章匯總【SpringBoot基礎(chǔ)教程專題】,【SpringCloud基礎(chǔ)教程專題】频轿,【ApiBoot組件使用專題】
本章目標(biāo)
使用SpringBoot項目完成單個、多個文件的上傳處理烁焙,并將上傳的文件保存到指定目錄下航邢。
構(gòu)建項目
我們使用InteiilJ IDEA工具構(gòu)建一個SpringBoot項目,項目先加入Web骄蝇、JSP膳殷、Servlet依賴等,項目結(jié)構(gòu)如下圖1所示:
我們下面配置application.properties文件支持JSP頁面的訪問九火,配置preffix以及suffix路徑轉(zhuǎn)發(fā)規(guī)則赚窃,如下圖2所示:
配置完成后我們在依次創(chuàng)建目錄/main/webapp/WEB-INF/jsp,結(jié)構(gòu)如下圖3所示:
我們在jsp目錄下創(chuàng)建一個index.jsp岔激,jsp內(nèi)我們添加一個簡單的form表單勒极,并且修改enctype="multipart/form-data",index.jsp代碼如下圖4所示:
jsp編寫完成后我們需要讓springboot內(nèi)的SpringMVC轉(zhuǎn)發(fā)到index.jsp頁面虑鼎,我們創(chuàng)建一個名叫做UploadController的控制器辱匿,添加初始化index.jsp頁面方法以及上傳文件的方法/upload,代碼如下圖5所示:
當(dāng)我們訪問http://127.0.0.1:8080/index地址時SpringBoot就會根據(jù)我們的application.properties配置自動定位到/webapp/WEB-INF/jsp/index.jsp炫彩,下面我們來編寫/upload方法內(nèi)的具體實現(xiàn)匾七。
單個文件上傳
我們使用MultipartFile對象內(nèi)置的方法transferTo()就可以實現(xiàn)JSP頁面上傳到request內(nèi)的文件對象直接存儲到指定文件File對象內(nèi),以此來完成上傳文件的存儲江兢。上傳單個文件代碼實現(xiàn)如下圖6所示:
可以看大我們直接將上傳的文件保存到項目的運行目錄下的/upload文件夾內(nèi)昨忆。我們來嘗試運行下項目。
測試單文件上傳
我們使用SpringBootApplication運行項目后杉允,控制臺打印日志并沒有什么異常邑贴,訪問127.0.0.1:8080/index看下效果席里,如下圖7所示:
我們可以成功的訪問到文件上傳的界面,那么我們選擇一個圖片測試下上傳效果痢缎,如下圖8胁勺、9所示:
我們選擇了一個圖片文件,點擊“提交上傳”按鈕后独旷,提示我們“上傳成功”的字樣署穗,那么我們上傳的文件在什么地方呢?我們打開項目展開webapp目錄可以看到多了一個upload文件夾嵌洼,upload內(nèi)就是我們剛才上傳的圖片文件案疲,結(jié)構(gòu)如下圖10所示:
自定義文件名
一般情況下我們不會使用上傳時文件的名字作為存儲在服務(wù)器端的名字,一般都會采用UUID或者時間戳的形式來保存麻养,下面我們修改下代碼使用UUID來作為文件名稱褐啡,修改代碼如下圖11所示:
我們重啟項目再次執(zhí)行上傳操作后,看下upload文件夾的效果鳖昌,圖下圖12所示:
可以看到我們新創(chuàng)建的文件名稱就是采用了隨機UUID的形式命名的备畦,還有一種使用時間戳,一般都是微毫秒作為文件名许昨,這里不做解釋了懂盐,(微毫秒獲取方式:System.nanoTime())。
多文件上傳
上面單個文件已經(jīng)是可以上傳成功了糕档,那么我們來講解下多個文件上傳莉恼。
修改JSP界面
我們對index.jsp做出簡單的修改,在下面添加一個多文件上傳的表單速那,如下圖13所示:
添加多文件上傳方法
我們轉(zhuǎn)到UploadController控制器俐银,添加/uploads方法,并提取單個上傳文件的方法為公共方法端仰,公共方法代碼如下圖14所示:
添加多個文件上傳的方法如下圖15所示:
我們多個文件的配置也已經(jīng)完成捶惜,下面我們重啟下項目,測試多個文件上傳功能榆俺。
測試多文件上傳
項目啟動完成后售躁,還是訪問127.0.0.1:8080/index,界面展示效果如下圖16所示:
下面的表單就是我們后來添加的茴晋,我們選擇多個文件并提交表單驗證下效果陪捷,如下圖17、18所示:
可以看到我們也是執(zhí)行上傳成功的提示诺擅,那如果我們上傳一個大文件市袖,如何修改SpringBoot的最大上傳限制呢?
修改上傳限制
SpringBoot上傳文件時限制了我們上傳文件最大容量為:1048576 bytes,那我們需要上傳超過配置的文件時修改怎么做呢苍碟?
打開application.properties配置文件酒觅,加入spring.http.multipart.max-file-size以及spring.http.multipart.max-request-size配置信息,配置信息如下圖19所示:
我們修改了上傳文件的最大限制容量為1024Mb也就是1GB微峰,最大的請求容量為2048Mb也就是2GB舷丹,那么我們重啟下項目再來測試上傳剛才的文件,效果如下圖20蜓肆、21所示:
可以看到我們剛才選擇的PDF文檔已經(jīng)上傳到/upload目錄下了颜凯,證明了我們的配置已經(jīng)生效。
總結(jié)
以上內(nèi)容就是本章的全部講解仗扬,本章主要講解了SringBoot項目如何上傳單個症概、多個文件到服務(wù)器端指定目錄下,上傳時修改限制上傳文件容量大小早芭,上傳文件的命名規(guī)則等彼城。
本章內(nèi)容已經(jīng)上傳到碼云:
SpringBoot配套源碼地址:https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源碼地址:https://gitee.com/hengboy/spring-cloud-chapter
SpringBoot相關(guān)系列文章請訪問:目錄:SpringBoot學(xué)習(xí)目錄
QueryDSL相關(guān)系列文章請訪問:QueryDSL通用查詢框架學(xué)習(xí)目錄
SpringDataJPA相關(guān)系列文章請訪問:目錄:SpringDataJPA學(xué)習(xí)目錄
SpringBoot相關(guān)文章請訪問:目錄:SpringBoot學(xué)習(xí)目錄,感謝閱讀退个!
歡迎微信掃碼加入知識星球募壕,恒宇少年帶你走以后的技術(shù)道路!S镉司抱!
知識星球 - 恒宇少年