Spring Boot實現文件上傳下載
本文實例為大傢分享瞭Spring Boot實現文件上傳下載的具體代碼,供大傢參考,具體內容如下
示例【Spring Boot 文件上傳下載】
程序清單:/springboot2/src/main/resources/templates/register.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>註冊</title> <link rel="stylesheet" th:href="@{css/bootstrap.min.css}" > <link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}" /> <script type="text/javascript" th:src="@{js/jquery-1.11.0.min.js}"></script> <script type="text/javascript" th:src="@{js/bootstrap.min.js}"></script> </head> <body> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">Spring Boot文件上傳</h3> </div> </div> <div class="container"> <div class="row"> <div class="col-md-8"> <form action="upload" method="post" enctype="multipart/form-data"> <div class="form-group"> <div class="input-group col-md-4"> <span class="input-group-addon"> <i class="glyphicon glyphicon-user"></i> </span> <input class="form-control" type="text" name="userName"> </div> </div> <div class="form-group"> <div class="input-group col-md-4"> <span class="input-group-addon"> <i class="glyphicon glyphicon-search"></i> </span> <input class="form-control" type="file" name="head"> </div> </div> <div class="form-group"> <div class="col-md-4"> <button type="submit" class="btn btn-success">註冊</button> </div> </div> </form> </div> </div> </div> </body> </html>
程序清單:/springboot2/src/main/resources/templates/userInfo.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>用戶信息</title> <link rel="stylesheet" th:href="@{css/bootstrap.min.css}" > <link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}" /> <script type="text/javascript" th:src="@{js/jquery-1.11.0.min.js}"></script> <script type="text/javascript" th:src="@{js/bootstrap.min.js}"></script> </head> <body> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">Spring Boot文件下載</h3> </div> </div> <div class="container"> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">用戶信息列表</h3> </div> </div> <div class="panel-body"> <div class="table table-responsive"> <table class="table table-bordered" id="userTable"> <tbody class="text-center"> <tr> <td><img th:src="@{'upload/'+${user.head.originalFilename}}" height="30"></td> <td th:text="${user.userName}">用戶名</td> <td><a th:href="@{download(filename=${user.head.originalFilename%20})}" >下載</a></td> </tr> </tbody> </table> </div> </div> </div> </body> </html>
程序清單:/springboot2/src/main/java/com/dwx/hello/User.java
package com.dwx.hello; import org.springframework.web.multipart.MultipartFile; public class User { private String userName; private MultipartFile head; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public MultipartFile getHead() { return head; } public void setHead(MultipartFile head) { this.head = head; } }
程序清單:/springboot2/src/main/java/com/dwx/hello/UserController.java
package com.dwx.hello; import java.io.File; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.FileUtils; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity.BodyBuilder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class UserController { @RequestMapping("/registerForm") public String registerForm() { return "register"; } @RequestMapping("/upload") public String upload(HttpServletRequest request, @ModelAttribute User user,Model model) throws IllegalStateException, IOException { if(!user.getHead().isEmpty()) { String path=request.getServletContext().getRealPath("/upload"); String fileName=user.getHead().getOriginalFilename(); File filePath=new File(path,fileName); if(!filePath.getParentFile().exists()) { filePath.getParentFile().mkdirs(); } user.getHead().transferTo(new File(path+File.separator+fileName)); model.addAttribute("user", user); return "userInfo"; }else { return "error"; } } @RequestMapping(value="/download") public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam("filename") String filename, @RequestHeader("User-Agent") String userAgent, Model model)throws Exception{ // 下載文件路徑 String path = request.getServletContext().getRealPath( "/upload/"); // 構建File File file = new File(path+File.separator+ filename); // ok表示Http協議中的狀態 200 BodyBuilder builder = ResponseEntity.ok(); // 內容長度 builder.contentLength(file.length()); // application/octet-stream : 二進制流數據(最常見的文件下載)。 builder.contentType(MediaType.APPLICATION_OCTET_STREAM); // 使用URLDecoder.decode對文件名進行解碼 filename = URLEncoder.encode(filename, "UTF-8"); // 設置實際的響應文件名,告訴瀏覽器文件要用於【下載】、【保存】attachment 以附件形式 // 不同的瀏覽器,處理方式不同,要根據瀏覽器版本進行區別判斷 if (userAgent.indexOf("MSIE") > 0) { // 如果是IE,隻需要用UTF-8字符集進行URL編碼即可 builder.header("Content-Disposition", "attachment; filename=" + filename); } else { // 而FireFox、Chrome等瀏覽器,則需要說明編碼的字符集 // 註意filename後面有個*號,在UTF-8後面有兩個單引號! builder.header("Content-Disposition", "attachment; filename*=UTF-8''" + filename); } return builder.body(FileUtils.readFileToByteArray(file)); } }
運行Spring Boot項目,訪問以下地址:http://localhost:8080/registerForm
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Java基礎之Thymeleaf的簡單使用
- spring boot實現文件上傳
- SpringMVC如何獲取表單數據(radio和checkbox)
- 基於SpringMVC實現網頁登錄攔截
- springMVC盜鏈接詳解