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[] 是可以支持二進(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 實 現(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對文件進(jìn)行映射,這樣在瀏覽器中就可以正常的顯示我們上傳的文件了
到此這篇關(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-09
Hibernate實現(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會話管理操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
SpringBoot+Redis實現(xiàn)后端接口防重復(fù)提交校驗的示例
本文將結(jié)合實例代碼,介紹SpringBoot+Redis實現(xiàn)后端接口防重復(fù)提交校驗的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06

