16-Spring Boot文件上傳示例


1黍翎、pom 包配置

我們使用 Spring Boot 版本 2.1.0叉趣、jdk 1.8昼浦、tomcat 8.0搬设。

org.springframework.bootspring-boot-starter-parent2.1.0.RELEASE1.8org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-thymeleaforg.springframework.bootspring-boot-devtoolstrue

引入了spring-boot-starter-thymeleaf做頁面模板引擎鞋诗,寫一些簡單的上傳示例膀捷。

2、啟動類設(shè)置

@SpringBootApplicationpublicclassFileUploadWebApplication{publicstaticvoidmain(String[] args)throwsException{? ? ? ? SpringApplication.run(FileUploadWebApplication.class, args);? ? }@BeanpublicTomcatServletWebServerFactorytomcatEmbedded(){? ? ? ? TomcatServletWebServerFactory tomcat =newTomcatServletWebServerFactory();? ? ? ? tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {if((connector.getProtocolHandler()instanceofAbstractHttp11Protocol)) {//-1 means unlimited((AbstractHttp11Protocol) connector.getProtocolHandler()).setMaxSwallowSize(-1);? ? ? ? ? ? }? ? ? ? });returntomcat;? ? }}

tomcatEmbedded 這段代碼是為了解決削彬,上傳文件大于10M出現(xiàn)連接重置的問題担孔。此異常內(nèi)容 GlobalException 也捕獲不到。

詳細(xì)內(nèi)容參考:Tomcat large file upload connection reset

3吃警、編寫前端頁面

上傳頁面

<!DOCTYPE html>

Spring Boot file upload example



非常簡單的一個 Post 請求糕篇,一個選擇框選擇文件,一個提交按鈕酌心,效果如下:

上傳結(jié)果展示頁面:

<!DOCTYPE html>

Spring Boot - Upload Status

效果圖如下:

4拌消、編寫上傳控制類

訪問 localhost 自動跳轉(zhuǎn)到上傳頁面:

@GetMapping("/")publicStringindex(){return"upload";}

上傳業(yè)務(wù)處理

@PostMapping("/upload")publicStringsingleFileUpload(@RequestParam("file")MultipartFile file,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? RedirectAttributes redirectAttributes){if(file.isEmpty()) {? ? ? ? redirectAttributes.addFlashAttribute("message","Please select a file to upload");return"redirect:uploadStatus";? ? }try{// Get the file and save it somewherebyte[] bytes = file.getBytes();? ? ? ? Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());? ? ? ? Files.write(path, bytes);? ? ? ? redirectAttributes.addFlashAttribute("message","You successfully uploaded '"+ file.getOriginalFilename() +"'");? ? }catch(IOException e) {? ? ? ? e.printStackTrace();? ? }return"redirect:/uploadStatus";}

上面代碼的意思就是,通過MultipartFile讀取文件信息安券,如果文件為空跳轉(zhuǎn)到結(jié)果頁并給出提示墩崩;如果不為空讀取文件流并寫入到指定目錄,最后將結(jié)果展示到頁面侯勉。

MultipartFile是Spring上傳文件的封裝類鹦筹,包含了文件的二進(jìn)制流和文件屬性等信息,在配置文件中也可對相關(guān)屬性進(jìn)行配置址貌,基本的配置信息如下:

spring.http.multipart.enabled=true?#默認(rèn)支持文件上傳.

spring.http.multipart.file-size-threshold=0?#支持文件寫入磁盤.

spring.http.multipart.location=# 上傳文件的臨時目錄

spring.http.multipart.max-file-size=1Mb?# 最大支持文件大小

spring.http.multipart.max-request-size=10Mb?# 最大支持請求大小

最常用的是最后兩個配置內(nèi)容铐拐,限制文件上傳大小,上傳時超過大小會拋出異常:

更多配置信息參考這里:Common application properties

5练对、異常處理

@ControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(MultipartException.class)publicStringhandleError1(MultipartException e, RedirectAttributes redirectAttributes){? ? ? ? redirectAttributes.addFlashAttribute("message", e.getCause().getMessage());return"redirect:/uploadStatus";? ? }}

設(shè)置一個@ControllerAdvice用來監(jiān)控Multipart上傳的文件大小是否受限遍蟋,當(dāng)出現(xiàn)此異常時在前端頁面給出提示。利用@ControllerAdvice可以做很多東西螟凭,比如全局的統(tǒng)一異常處理等虚青,感興趣的同學(xué)可以下來了解。

6螺男、總結(jié)

這樣一個使用 Spring Boot 上傳文件的簡單 Demo 就完成了棒厘,感興趣的同學(xué)可以將示例代碼下載下來試試吧纵穿。

文章內(nèi)容已經(jīng)升級到 Spring Boot 2.x

示例代碼-github

示例代碼-碼云

參考

Spring Boot file upload example

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市奢人,隨后出現(xiàn)的幾起案子谓媒,更是在濱河造成了極大的恐慌,老刑警劉巖达传,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異迫筑,居然都是意外死亡宪赶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門脯燃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搂妻,“玉大人,你說我怎么就攤上這事辕棚∮鳎” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵逝嚎,是天一觀的道長扁瓢。 經(jīng)常有香客問我,道長补君,這世上最難降的妖魔是什么引几? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮挽铁,結(jié)果婚禮上伟桅,老公的妹妹穿的比我還像新娘。我一直安慰自己叽掘,他們只是感情好楣铁,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著更扁,像睡著了一般盖腕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浓镜,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天赊堪,我揣著相機(jī)與錄音,去河邊找鬼竖哩。 笑死哭廉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的相叁。 我是一名探鬼主播遵绰,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辽幌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了椿访?” 一聲冷哼從身側(cè)響起乌企,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎成玫,沒想到半個月后加酵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡哭当,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年猪腕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钦勘。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡陋葡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出彻采,到底是詐尸還是另有隱情腐缤,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布肛响,位于F島的核電站岭粤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏特笋。R本人自食惡果不足惜绍在,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雹有。 院中可真熱鬧偿渡,春花似錦、人聲如沸霸奕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽质帅。三九已至适揉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間煤惩,已是汗流浹背嫉嘀。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留魄揉,地道東北人剪侮。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像洛退,于是被迫代替她去往敵國和親瓣俯。 傳聞我的和親對象是個殘疾皇子杰标,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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

  • Spring Boot Spring Boot 是微服務(wù)中最好的 Java 框架. 我們建議你能夠成為一名 Spr...
    AlbenXie閱讀 1,853評論 0 18
  • SpringMVC原理分析 Spring Boot學(xué)習(xí) 5、Hello World探究 1彩匕、POM文件 1腔剂、父項目...
    jack_jerry閱讀 1,289評論 0 1
  • 原文鏈接:https://docs.spring.io/spring-boot/docs/1.4.x/refere...
    pseudo_niaonao閱讀 4,697評論 0 9
  • 早上好!yh:保持你的微笑驼仪。因為每一刻你面對的都是陌生不曾同樣的心掸犬,微笑是心靈的握手。愛你的爸爸媽媽! 早安第三十...
    ACE教育為國之未來閱讀 130評論 0 1
  • 筆袋對于寫字的人離不了绪爸,像這種棉麻袋其實也不僅僅是用來當(dāng)筆袋的湾碎。 裝隨手小物都是可以的。 我對于便簽紙和筆袋有種特...
    葉樣悠閱讀 376評論 4 5