SpringMVC深入講解文件的上傳下載實(shí)現(xiàn)
SpringMVC文件下載
說明: 在 SpringMVC 中,通過返回 ResponseEntity的類型,可以實(shí)現(xiàn)文件下載的功能
案例演示
1.修改 json.jsp
<h1>下載文件的測(cè)試 </h1> <a href="<%=request.getContextPath()%>/downFile" rel="external nofollow" >點(diǎn)擊下載文件</a>
? 2.修改 JsonHandler.java, 增加方法
/** * 響應(yīng)用戶下載文件的請(qǐng)求 */ @RequestMapping(value = "/downFile") public ResponseEntity<byte[]> downFile(HttpSession session) throws Exception { //C:\ide\IdeaProjects\llp-springmvc\out\artifacts\llp_springmvc_war_exploded\img //獲取文文件真實(shí)運(yùn)行的目錄 // String realPath = session.getServletContext().getRealPath("/img"); //1. 先獲取到下載文件的inputStream InputStream resourceAsStream = session.getServletContext().getResourceAsStream("/img/2.jpg"); //2. 開辟一個(gè)存放文件的byte數(shù)組, 這里老師使用byte[] 是可以支持二進(jìn)制數(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 實(shí) 現(xiàn) 的 。 Spring 用 Jakarta Commons FileUpload 技 術(shù) 實(shí) 現(xiàn) 了 一 個(gè) MultipartResolver 實(shí)現(xiàn)類:CommonsMultipartResovler
- Spring MVC 上下文中默認(rèn)沒有裝配 MultipartResovler,因此默認(rèn)情況下不能處理文件的 上傳工作,如果想使用 Spring 的文件上傳功能,需現(xiàn)在上下文中配置 MultipartResolver
<!--配置文件上傳需要的bean,這里id不能亂寫,CommonsMultipartResolver是MultipartResolver接口的實(shí)現(xiàn)類,底層是按照接口來裝配的--> <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"/>
2.需求分析/圖解
3.應(yīng)用實(shí)例
引入 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 這里第一個(gè)斜杠在瀏覽器端會(huì)被解析成ip:port ===》 ip:port/springmvc/fileupload action=<%=request.getContextPath()%>/fileUpload action=fileUpload 我們通過 http://localhost:8080/springmvc/fileUpload.jsp頁面提交發(fā)起請(qǐng)求,如果不填寫斜杠, 會(huì)將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); //得到要把上傳文件保存到哪個(gè)路徑[全路徑:包括文件名] 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"; } }
瀏覽器測(cè)試
PostMan測(cè)試
4.Debug-file.transferTo(目標(biāo)文件)
transferTo函數(shù)會(huì)將客戶端文件寫入到臨時(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)文件
在實(shí)際開發(fā)中我們可以將文件寫入到服務(wù)器的目錄中,通過nginx對(duì)文件進(jìn)行映射,這樣在瀏覽器中就可以正常的顯示我們上傳的文件了
到此這篇關(guān)于SpringMVC深入講解文件的上傳下載實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringMVC上傳下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java編程下字符串的16位,32位md5加密實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猨ava編程下字符串的16位,32位md5加密實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09Hibernate實(shí)現(xiàn)批量添加數(shù)據(jù)的方法
這篇文章主要介紹了Hibernate實(shí)現(xiàn)批量添加數(shù)據(jù)的方法,詳細(xì)分析了基于Hibernate執(zhí)行批量添加操作的具體步驟與相關(guān)實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-03-03解決IDEA項(xiàng)目project包目錄消失的問題
這篇文章主要介紹了解決IDEA項(xiàng)目project包目錄消失的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02IntelliJ?IDEA?2022安裝注冊(cè)永久激活
java開發(fā)工具IntelliJ?IDEA深受用戶喜愛,很多朋友對(duì)這個(gè)idea開發(fā)工具比較忠心,一旦有新版本發(fā)出,很多小伙伴就迫不及待的想更新,今天小編給大家?guī)砹薸dea2022.1最新永久激活碼,親測(cè)有效,喜歡的朋友快來下載體驗(yàn)吧2022-08-08tomcat部署java web項(xiàng)目遇到的問題及解決方法
這篇文章主要介紹了tomcat部署java web項(xiàng)目遇到的問題及解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07基于Cookie與Session的Servlet?API會(huì)話管理操作
這篇文章主要為大家介紹了基于Cookie與Session的Servlet?API會(huì)話管理操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08SpringBoot+Redis實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn)的示例
本文將結(jié)合實(shí)例代碼,介紹SpringBoot+Redis實(shí)現(xiàn)后端接口防重復(fù)提交校驗(yàn)的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06