江帥帥:精通 Spring Boot 系列 06
Spring Boot 檔案的上傳下載
說真的,在 Spring Boot 實現檔案下載,真的是方便到讓我顫抖。Java 中實現檔案上傳可以用兩個元件:CommonMultipartResolver 和 StandardServletMultipartResolver。
Spring Boot 在 web 模組中整合了 Spring MVC ,檔案上傳這塊兒的支援是可以透過即插即用的 MultipartResolver 實現類:CommonMultipartResolver。如果用它,則需要使用 commons-fileupload 元件來處理。
Spring Boot 提供的檔案上傳自動化配置類是 MultipartAutoConfiguration 中預設使用了 StandardServletMultipartResolver,在上傳檔案甚至能夠做到零配置。
1. 單檔案上傳
1)新增 fileUpload.html 檔案
在上傳頁面的表單中,新增一個 type 為 file 的控制元件,用來選擇需要上傳的圖片檔案。上傳的介面是“/upload”,另外 method 要設定為“post”,還有 enctype 要設定為“multipart/form-data”,程式碼具體如下:
upload
2)新增 FileUploadController 檔案
首先,設定我們的檔案上傳路徑為專案執行目錄下的 upload 資料夾。然後,我們用 MultipartFile 來繫結上傳的檔案,使用 transferTo() 方法可以非常方便實現檔案儲存到磁碟當中。具體實現程式碼如下:
() { String path = req.getSession().getServletContext().getRealPath(); File folder = File(path); (!folder.isDirectory()) { folder.mkdirs(); } String oName = uploadFile.getOriginalFilename(); String nName = UUID.randomUUID().toString() + oName.substring(oName.lastIndexOf(), oName.length()); { uploadFile.transferTo( File(folder + File.separator + nName)); String filePath = req.getScheme() + + req.getServerName() + + req.getServerPort() + + nName; ; } (IOException ex) { ex.printStackTrace(); } ; }
位址列中,輸入 選擇檔案上傳,具體執行效果如下:
2. 採用物件方式來上傳檔案
很多時候的上傳操作,也都會把檔案作為物件的屬性進行儲存,具體如何實現?下面透過註冊頁面,填寫使用者的相關資訊,然後點選註冊來上傳 User 物件。
1)新增 fileUpload2.html 檔案
透過一個表單,來收集使用者的具體資訊,然後點選“註冊使用者”按鈕即可提交 /register 註冊請求。程式碼具體如下:
使用者名稱: 密碼: 頭像:
2)新增 User 類
User 類主要是用來封裝使用者資訊的,其中 MultipartFile 型別的 pic 是用來接收上傳的影像檔案。
{ String username; String password; MultipartFile pic; }
3)新增 userRegister() 方法
在 userRegister() 方法形參列表中,使用 @ModelAttribute 註解將表單提交的資料繫結到 User 物件中,其中圖片會儲存到 User 的 pic 屬性中,然後轉換為 Multipart 型別。檔案上傳成功之後,所有的使用者資訊都儲存到 model 當中。
{ () { (!user.getPic().isEmpty()) { String picPath = req.getServletContext().getRealPath(); String picName = user.getPic().getOriginalFilename(); File filePath = File(picPath, picName); (!filePath.getParentFile().exists()){ filePath.getParentFile().mkdirs(); } user.getPic().transferTo( File(picPath + File.separator + picName)); model.addAttribute(, user); ; } { ; } } }
3)在 templates 目錄中,新增 userMsg.html 檔案
使用者名稱
執行效果,具體如下:
3. 多檔案上傳
1)新增 fileUpload2.html 頁面
選第一張圖片: 選第二張圖片: 選第三張圖片:
2)新增 uploadFiles() 方法
() { String path = req.getSession().getServletContext().getRealPath(); File folder = File(path); (!folder.isDirectory()) { folder.mkdirs(); } ( != uploadFiles && uploadFiles.length > ) { (MultipartFile uploadFile : uploadFiles) { String oName = uploadFile.getOriginalFilename(); String nName = UUID.randomUUID().toString() + oName.substring(oName.lastIndexOf(), oName.length()); { uploadFile.transferTo( File(folder, nName)); ; } (IOException ex) { ex.printStackTrace(); } } } ; }
執行結果,具體如下:
4. 檔案下載
1)編輯 userMsg.html 頁面
使用者名稱 下載頭像
2)新增 downloadPic() 方法
這裡使用了 ResponseEntity 型別,就能定義返回的 HttpHeaders、BodyBuilder 和 HttpStatus,然後返回客戶端下載。
(value=) ResponseEntity<[]> downloadPic(HttpServletRequest request, () String filename, () String userAgent, Model model) Exception{ String path = request.getServletContext().getRealPath( ); File file = File(path + File.separator + filename); BodyBuilder builder = ResponseEntity.ok(); builder.contentLength(file.length()); builder.contentType(MediaType.APPLICATION_OCTET_STREAM); filename = URLEncoder.encode(filename, ); (userAgent.indexOf() > ) { builder.header(, + filename); } { builder.header(, + filename); } builder.body(FileUtils.readFileToByteArray(file)); }
執行效果,具體如下:
免費領取更多技術資料及影片
本文來源於:奈學開發者社群-江帥帥
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69976011/viewspace-2699052/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 江帥帥:精通 Spring Boot 系列 01Spring Boot
- 江帥帥:精通 Spring Boot 系列 02Spring Boot
- 江帥帥:精通 Spring Boot 系列 03Spring Boot
- 江帥帥:精通 Spring Boot 系列 04Spring Boot
- 江帥帥:精通 Spring Boot 系列 05Spring Boot
- 艦隊統帥
- 蘇嵌/楊帥/0711
- 蘇嵌//楊帥/2018.7.10
- L1-020 帥到沒朋友
- 帥初的“羅生門”漩渦
- 王廣帥IM工程執行記錄
- Spring Boot系列十九 Spring boot整合 swaggerSpring BootSwagger
- Linux安裝Nginx 作者:哇塞大嘴好帥LinuxNginx
- 超帥氣的網站-我愛冷笑話網站
- Spring Boot系列(一):Spring Boot快速開始Spring Boot
- Spring Boot系列(四):Spring Boot原始碼解析Spring Boot原始碼
- Spring Boot系列(一):Spring Boot 入門篇Spring Boot
- Spring Boot2 系列教程(三)理解 Spring BootSpring Boot
- 可能輕微捯飭下,IT 男就能變帥了
- L1-020 帥到沒朋友 分數 20
- 換一個帥一點姿勢實現DexHunter
- 逝去的 2020,帥地期待過,也曾迷茫過...
- 這樣寫程式碼,真是帥到沒有朋友
- Spring Boot系列(三):Spring Boot整合Mybatis原始碼解析Spring BootMyBatis原始碼
- 酷帥吊炸天的 Pandas 常用操作命令彙總
- WFee路由器近日流出諜照,外形帥到沒朋友!路由器
- 手撕redis分散式鎖,隔壁張小帥都看懂了!Redis分散式
- 技術向上,雪坡向下:拼多多的“新帥”與新路
- Spring Boot乾貨系列:(十二)Spring Boot使用單元測試Spring Boot
- Spring Boot系列(四) Spring Cloud 之 Config ClientSpring BootCloudclient
- 史丹佛AI實驗室換帥!Christopher Manning接替李飛飛AI
- Spring Boot系列筆記--整合RedisSpring Boot筆記Redis
- Spring Boot乾貨系列:(十三)Spring Boot全域性異常處理整理Spring Boot
- Spring Boot系列十七 Spring Boot 整合 websocket,使用RabbitMQ做為訊息代理Spring BootWebMQ
- Spring Boot系列十六 WebSocket簡介和spring boot整合簡單訊息代理Spring BootWeb
- 最近爆火的帥小夥丁真在AI面前顏值多少分?AI
- Spring Boot系列之一:如何快速熟悉Spring技術棧Spring Boot
- 從零開始學Spring Boot系列-SpringApplicationSpring BootAPP