您好,登錄后才能下訂單哦!
Spring Boot 文件的上傳下載
說真的,在 Spring Boot 實現文件下載,真的是方便到讓我顫抖。Java 中實現文件上傳可以用兩個組件:CommonMultipartResolver 和 StandardServletMultipartResolver。
Spring Boot 在 web 模塊中集成了 Spring MVC ,文件上傳這塊兒的支持是可以通過即插即用的 MultipartResolver 實現類:CommonMultipartResolver。如果用它,則需要使用 commons-fileupload 組件來處理。
Spring Boot 提供的文件上傳自動化配置類是 MultipartAutoConfiguration 中默認使用了 StandardServletMultipartResolver,在上傳文件甚至能夠做到零配置。
在上傳頁面的表單中,添加一個 type 為 file 的控件,用來選擇需要上傳的圖片文件。上傳的接口是“/upload”,另外 method 要設置為“post”,還有 enctype 要設置為“multipart/form-data”,代碼具體如下:
upload
首先,設置我們的文件上傳路徑為項目運行目錄下的 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(); } ; }
地址欄中,輸入 http://localhost:8080/fileUpload.html 選擇文件上傳,具體運行效果如下:
很多時候的上傳操作,也都會把文件作為對象的屬性進行保存,具體如何實現?下面通過注冊頁面,填寫用戶的相關信息,然后點擊注冊來上傳 User 對象。
通過一個表單,來收集用戶的具體信息,然后點擊“注冊用戶”按鈕即可提交 /register 注冊請求。代碼具體如下:
用戶名: 密碼: 頭像:
User 類主要是用來封裝用戶信息的,其中 MultipartFile 類型的 pic 是用來接收上傳的圖像文件。
{ String username; String password; MultipartFile pic; }
在 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 文件
用戶名
運行效果,具體如下:
選第一張圖片: 選第二張圖片: 選第三張圖片:
() { 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(); } } } ; }
運行結果,具體如下:
用戶名 下載頭像
這里使用了 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)); }
運行效果,具體如下:
免費領取更多技術資料及視頻
本文來源于:奈學開發者社區-江帥帥
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。