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 })}" >下载</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

推荐阅读