SpringMVC深入講解文件的上傳下載實現(xiàn)
SpringMVC文件下載
說明: 在 SpringMVC 中,通過返回 ResponseEntity的類型,可以實現(xiàn)文件下載的功能
案例演示
1.修改 json.jsp
<h1>下載文件的測試 </h1> <a href="<%=request.getContextPath()%>/downFile" rel="external nofollow" >點擊下載文件</a>
? 2.修改 JsonHandler.java, 增加方法
/** * 響應(yīng)用戶下載文件的請求 */ @RequestMapping(value = "/downFile") public ResponseEntity<byte[]> downFile(HttpSession session) throws Exception { //C:\ide\IdeaProjects\llp-springmvc\out\artifacts\llp_springmvc_war_exploded\img //獲取文文件真實運行的目錄 // String realPath = session.getServletContext().getRealPath("/img"); //1. 先獲取到下載文件的inputStream InputStream resourceAsStream = session.getServletContext().getResourceAsStream("/img/2.jpg"); //2. 開辟一個存放文件的byte數(shù)組, 這里老師使用byte[] 是可以支持二進制數(shù)據(jù)(圖片,視頻。) byte[] bytes = new byte[resourceAsStream.available()]; //3. 將下載文件的數(shù)據(jù),讀入到byte[] resourceAsStream.read(bytes); //4.添加Header頭 HttpHeaders httpHeaders = new HttpHeaders(); //指定返回的數(shù)據(jù),客戶端應(yīng)當(dāng)以附件形式處理 一般有兩種方式: inline:直接在頁面顯示 attchment:以附件形式下載 httpHeaders.add("Content-Disposition", "attachment;filename=2.jpg"); //5.返回的HttpStatus return new ResponseEntity<>(httpHeaders, HttpStatus.OK); }
? 3.在web目錄放入img圖片
文件下載響應(yīng)頭的設(shè)置 content-type 指示響應(yīng)內(nèi)容的格式 content-disposition 指示如何處理響應(yīng)內(nèi)容。
一般有兩種方式: inline:直接在頁面顯示 attchment:以附件形式下載
SpringMVC文件上傳
1.基本介紹
基本介紹
- Spring MVC 為 文 件 上 傳 提 供 了 直 接 的 支 持 , 這 種 支 持 是 通 過 即 插 即 用 的 MultipartResolver 實 現(xiàn) 的 。 Spring 用 Jakarta Commons FileUpload 技 術(shù) 實 現(xiàn) 了 一 個 MultipartResolver 實現(xiàn)類:CommonsMultipartResovler
- Spring MVC 上下文中默認(rèn)沒有裝配 MultipartResovler,因此默認(rèn)情況下不能處理文件的 上傳工作,如果想使用 Spring 的文件上傳功能,需現(xiàn)在上下文中配置 MultipartResolver
<!--配置文件上傳需要的bean,這里id不能亂寫,CommonsMultipartResolver是MultipartResolver接口的實現(xiàn)類,底層是按照接口來裝配的--> <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"/>
2.需求分析/圖解
3.應(yīng)用實例
引入 springmvc 文件上傳需要的 jar 包
創(chuàng)建 \web\fileUpload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>文件上傳</title> </head> <body> <h1>文件上傳的演示</h1> <%-- 這里action有兩種填寫方式, 第一種:獲取當(dāng)前工程路徑 /springmvc/fileupload 這里第一個斜杠在瀏覽器端會被解析成ip:port ===》 ip:port/springmvc/fileupload action=<%=request.getContextPath()%>/fileUpload action=fileUpload 我們通過 http://localhost:8080/springmvc/fileUpload.jsp頁面提交發(fā)起請求,如果不填寫斜杠, 會將fileupload拼接到 http://localhost:8080/springmvc/后面 --%> <form action="<%=request.getContextPath()%>/fileUpload" method="post" enctype="multipart/form-data"> 文件介紹:<input type="text" name="introduce"><br> 選擇文件:<input type="file" name="file"><br> <input type="submit" value="上傳文件"> </form> </body> </html>
創(chuàng)建FileUploadHandler.java
@Controller public class FileUploadHandler { /** * 文件上傳 * @param file 客戶端上傳的文件 * @param request 這里在目標(biāo)方法添加HttpServletRequest 主要是為了將文件保存到工程路徑中 * @return */ @RequestMapping(value = "/fileUpload") public String fileUpload(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request, String introduce) throws IOException { //接收到提交的文件名 String originalFilename = file.getOriginalFilename(); System.out.println("你上傳的文件名= " + originalFilename); System.out.println("introduce=" + introduce); //得到要把上傳文件保存到哪個路徑[全路徑:包括文件名] String fileFullPath = request.getServletContext().getRealPath("/img/" + originalFilename); //創(chuàng)建目標(biāo)文件 File saveToFile = new File(fileFullPath); //將上傳的文件,轉(zhuǎn)存到saveToFile(目標(biāo)文件:我們希望文件存放的位置) file.transferTo(saveToFile); return "success"; } }
瀏覽器測試
PostMan測試
4.Debug-file.transferTo(目標(biāo)文件)
transferTo函數(shù)會將客戶端文件寫入到臨時文件中,C:\Users\asus\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_llp-springmvc\work\Catalina\localhost\springmvc\upload_6889b5a3_a1f5_4bba_a16e_a8dc15b12b87_00000001.tmp
在將文件寫入到目標(biāo)文件
在實際開發(fā)中我們可以將文件寫入到服務(wù)器的目錄中,通過nginx對文件進行映射,這樣在瀏覽器中就可以正常的顯示我們上傳的文件了
到此這篇關(guān)于SpringMVC深入講解文件的上傳下載實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringMVC上傳下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java編程下字符串的16位,32位md5加密實現(xiàn)方法
下面小編就為大家?guī)硪黄猨ava編程下字符串的16位,32位md5加密實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09Hibernate實現(xiàn)批量添加數(shù)據(jù)的方法
這篇文章主要介紹了Hibernate實現(xiàn)批量添加數(shù)據(jù)的方法,詳細(xì)分析了基于Hibernate執(zhí)行批量添加操作的具體步驟與相關(guān)實現(xiàn)代碼,需要的朋友可以參考下2016-03-03基于Cookie與Session的Servlet?API會話管理操作
這篇文章主要為大家介紹了基于Cookie與Session的Servlet?API會話管理操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08SpringBoot+Redis實現(xiàn)后端接口防重復(fù)提交校驗的示例
本文將結(jié)合實例代碼,介紹SpringBoot+Redis實現(xiàn)后端接口防重復(fù)提交校驗的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06