文件下載-ResponseEntity<T>
說明
在SpringMVC中,通過返回ResponseEntity<T>的類型,可以實現文件下載的功能
核心代碼:就是設置HttpHeader
文件下載響應頭的設置
content-type? ? ? ? ? ? ? ? ? 指示響應內容的格式
content-disposition????????指示如何處理響應內容
一般有兩種方式:
content-disposition:inline? ? ? ? ? ? ? ? 以內聯形式,直接在頁面顯示
content-disposition:attchment? ? ? ? ?以附件形式,下載
應用實例
1.準備要下載的文件,復制到,web/directory/Deepseek.png
2.添加鏈接,web/json.jsp
<a href="<%=request.getContextPath()%>/json/download" >點擊下載文件</a>
3.增加方法,com/stein/springMVC/json/handler/JsonHandler.java
@RequestMapping("/download")@ResponseBodypublic ResponseEntity<byte[]> downloadFile(HttpSession session) {//1.獲取資源的輸入流InputStream resourceAsStream = session.getServletContext().getResourceAsStream("/directory/Deepseek.png");//2.設置讀取資源的內存大小byte[] bytes;try {bytes = new byte[resourceAsStream.available()];//3.將資源讀取到內存中去resourceAsStream.read(bytes);} catch (IOException e) {throw new RuntimeException(e);}//4.提供構造器的參數public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatus status) {//bytes就是要傳輸的數據body//headers是傳輸報頭HttpHeaders httpHeaders = new HttpHeaders();//設置傳輸內容,attachment表示以附件的形式進行下載,下載時的文件名我現在設置這個httpHeaders.add("Content-Disposition","attachment;filename=DeepseekCustom.jpg");//5.指定成功下載時的狀態碼HttpStatus httpStatus = HttpStatus.OK;//6.創建響應實體,并返回return new ResponseEntity<>(bytes, httpHeaders,HttpStatus.OK);}
4.測試。點擊下載后,彈出另存為窗口
postman再測
因為postman沒有解析jpg格式,所以顯示的亂碼。
文件上傳
-
基本介紹
1.Spring MVC為文件上傳提供了直接的支持,這種支持是通過即插即用的MultipartResolver實現的。
Spring用Jakarta Commons FileUpload技術實現了一個MultipartResolver實現類:
CommonsMultipartResovler
2.Spring MVC上下文中默認沒有裝配MultipartResovler,因此默認情況下不能處理文件的上傳工作,如果想使用Spring的文件上傳功能,需現在上下文中配置MultipartResolver
-
應用實例
1.引入jar包
2.創建web/upload.jsp
????????enctype:encodetype編碼類型默i認是application/x-www-urlencoded即url編碼這種編碼不適二進制文件數據的提交,一般是適用文本
????????如果是要進行二進制文件的提交enctype要指定multipart/form-data表示表單提交的數據是有多個部分組成,也就是可以提交二進制數據和文本數據
<h1>文件上傳</h1><form action="<%=request.getContextPath()%>/upload" method="post" enctype="multipart/form-data">文件介紹:<input type="text" name="introduce"><br>選擇文件:<input type="file" name="file"><br><input type="submit" value="提交"></form>
3.配置文件上傳解析器,web/WEB-INF/springMVC-servlet.xml
<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
4.創建com/stein/springMVC/upload/FileUploadHandler.java
@Controller
public class FileUploadHandler {@RequestMapping("/upload")public String upload(@RequestParam("file")MultipartFile file,//設定好與前端一直的名稱后,后面這個變量名file就可以隨便改了HttpServletRequest request,String introduce) throws IOException {String originalFilename = file.getOriginalFilename();System.out.println("上傳文件的名字=" + originalFilename);System.out.println("introduce: " + introduce);//參數填什么?這兒是打算保存的路徑,可以是根路徑"/",也可以是全路徑("/img/"+originalFilename)//要上傳的文件保存的全路徑String realPath = request.getServletContext().getRealPath("/");System.out.println("realPath = " + realPath);//上傳文件的文件名。可以一步生成。// 注意:如果要創建img文件夾的話,要在web目錄里面提前建好,同時檢查out目錄里面是否已經重構,否則上傳會報錯//String fileFullPath =request.getServletContext().getRealPath("/img/"+originalFilename);String fileFullPath = realPath + File.separator + originalFilename;System.out.println("fileFullPath = " + fileFullPath);File localFile = new File(fileFullPath);file.transferTo(localFile);return "success";}
}
5.測試
上傳成功,success!
6.postman再測。成功!