SpringMVC使用ResponseEntity實現(xiàn)文件上傳下載
使用 ResponseEntity 實現(xiàn)文件上傳和下載
在 static 下新建一個 img ,并且我放了一張圖片在里面,然后重新 maven 打包一下。

下載
新建一個頁面file.html,并且配置視圖控制器,以便跳轉(zhuǎn):
<mvc:view-controller path="/file" view-name="file"></mvc:view-controller>
編寫頁面內(nèi)容,用來下載我上面存放到 img 中的圖片:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>測試文件上傳和下載</title>
</head>
<body>
<a th:href="@{/testDown}" rel="external nofollow" >下載靜態(tài)圖片</a>
</body>
</html>后端編寫對應(yīng)處理請求的控制,新建一個類 FileUpAndDownController,在下面編寫控制器方法:
@Controller
public class FileUpAndDownController {
@RequestMapping("/testDown")
public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
//獲取ServletContext對象
ServletContext servletContext = session.getServletContext();
//獲取服務(wù)器中文件的真實路徑
String realPath = servletContext.getRealPath("/static/img/ACC3.jpg");
//創(chuàng)建輸入流
InputStream is = new FileInputStream(realPath);
//創(chuàng)建字節(jié)數(shù)組,is.available()是當(dāng)前流的所有字節(jié)數(shù)
byte[] bytes = new byte[is.available()];
//將流讀到字節(jié)數(shù)組中
is.read(bytes);
//創(chuàng)建HttpHeaders對象設(shè)置響應(yīng)頭信息
MultiValueMap<String, String> headers = new HttpHeaders();
//設(shè)置要下載方式以及下載文件的名字
headers.add("Content-Disposition", "attachment;filename=ACC3.jpg");
//設(shè)置響應(yīng)狀態(tài)碼
HttpStatus statusCode = HttpStatus.OK;
//創(chuàng)建ResponseEntity對象
ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(bytes, headers, statusCode);
//關(guān)閉輸入流
is.close();
return responseEntity;
}
}文件不管是上傳還是下載,本質(zhì)還是一個復(fù)制的過程。
既然要復(fù)制,那還是要先讀后寫,所以上面創(chuàng)建了輸入流,將流讀到字節(jié)數(shù)組中,然后把這個字節(jié)數(shù)組響應(yīng)到瀏覽器,這就是要下載的文件了。
所以,用到了 ResponseEntity,要把響應(yīng)到瀏覽器的數(shù)據(jù)轉(zhuǎn)化成 ResponseEntity,最后返回。
重新部署測試一下,訪問 file 頁面,點擊下載超鏈接。

下載成功。

上傳
在前端頁面 file.html 中繼續(xù)添加內(nèi)容:
<form th:action="@{/testUp}" method="post" enctype="multipart/form-data">
頭像:<input type="file" name="photo"><br>
<input type="submit" value="上傳">
</form>文件上傳要求 form 表單的請求方式必須為 post,并且添加屬性 enctype="multipart/form-data"。
添加依賴:
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>SpringMVC 中將上傳的文件封裝到MultipartFile對象中,通過此對象可以獲取文件相關(guān)信息。
在 springMVC 的配置文件中添加配置:
<!--必須通過文件解析器的解析才能將文件轉(zhuǎn)換為MultipartFile對象--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
增加控制器方法,實現(xiàn)上傳:
@RequestMapping("/testUp")
public String testUp(MultipartFile photo, HttpSession session) throws IOException {
//獲取上傳的文件的文件名
String fileName = photo.getOriginalFilename();
//處理文件重名問題
String hzName = fileName.substring(fileName.lastIndexOf("."));
fileName = UUID.randomUUID().toString() + hzName;
//獲取服務(wù)器中 photo目錄的路徑
ServletContext servletContext = session.getServletContext();
String photoPath = servletContext.getRealPath("photo");
File file = new File(photoPath);
if(!file.exists()){
file.mkdir(); // 不存在則創(chuàng)建目錄
}
String finalPath = photoPath + File.separator + fileName;
//實現(xiàn)上傳功能
photo.transferTo(new File(finalPath));
return "success";
}注意,我們最終上傳的位置是在這里,會自動創(chuàng)建一個 photo 目錄,里面存放著上傳的圖片。

部署測試一下。

上傳請求處理成功,跳轉(zhuǎn)到了 success 頁。

再來看下目標(biāo)位置,已經(jīng)有了上傳過來的圖片了。

以上就是SpringMVC使用ResponseEntity實現(xiàn)文件上傳下載的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC文件上傳下載的資料請關(guān)注腳本之家其它相關(guān)文章!
- Springboot3?ResponseEntity?完全使用案例
- SpringBoot中ResponseEntity的使用方法舉例詳解
- 一文詳解Spring中ResponseEntity包裝器的使用
- SpringBoot的ResponseEntity類返回給前端具體講解
- SpringBoot ResponseEntity標(biāo)識Http響應(yīng)方式
- 解決springboot responseentity<string>亂碼問題
- springmvc @ResponseStatus和ResponseEntity的使用
- 使用spring框架ResponseEntity實現(xiàn)文件下載
- Spring ResponseEntity的使用詳解
相關(guān)文章
Spring實戰(zhàn)之協(xié)調(diào)作用域不同步的Bean操作示例
這篇文章主要介紹了Spring實戰(zhàn)之協(xié)調(diào)作用域不同步的Bean操作,結(jié)合實例形式分析了Spring協(xié)調(diào)作用域不同步的Bean相關(guān)配置及使用技巧,需要的朋友可以參考下2019-11-11
Spring Boot @Async 異步任務(wù)執(zhí)行方法
本篇文章主要介紹了Spring Boot @Async 異步任務(wù)執(zhí)行方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
JAVA實戰(zhàn)練習(xí)之圖書管理系統(tǒng)實現(xiàn)流程
隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,計算機(jī)應(yīng)用的普及,利用計算機(jī)對圖書館的日常工作進(jìn)行管理勢在必行,本篇文章手把手帶你用Java實現(xiàn)一個圖書管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-10-10
Spring + Spring Boot + MyBatis + MongoDB的整合教程
這篇文章主要給大家介紹了關(guān)于Spring + Spring Boot + MyBatis + MongoDB的整合教程,文中通過圖文以及示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-12-12
Java數(shù)據(jù)結(jié)構(gòu)之單鏈表的實現(xiàn)與面試題匯總
由于順序表的插入刪除操作需要移動大量的元素,影響了運行效率,因此引入了線性表的鏈?zhǔn)酱鎯Α獑捂湵?。本文為大家介紹了單鏈表的實現(xiàn)與面試題匯總,感興趣的可以了解一下2022-10-10

