<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了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
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45