SpringMvc 檔案下載 詳解
摘要:最近SSM 需要用到檔案下載,以前沒用過,在百度上找了好久發現沒有一篇部落格,對於此段程式碼進行詳細講解,這裡是本人的個人總結,跟大家分享一下!!!不謝/** * 檔案下載 * ResponseEntity:該類實現響應頭、檔案資料(以位元組儲存)、狀態封裝在一起交給瀏覽器處理以實現瀏覽器的檔案下載...
最近SSM 需要用到檔案下載,以前沒用過,在百度上找了好久發現沒有一篇部落格,對於此段程式碼進行詳細講解,
這裡是本人的個人總結,跟大家分享一下!!!不謝
/**
* 檔案下載
* ResponseEntity:該類實現響應頭、檔案資料(以位元組儲存)、狀態封裝在一起交給瀏覽器處理以實現瀏覽器的檔案下載
* <p>
* ResponseEntity 也可作為響應資料使用與@ResponseBody 註解功能相似
* 但是ResponseEntity的優先順序高於@ResponseBody
* 在不是ResponseEntity的情況下才去檢查有沒有@ResponseBody註解。
* 如果響應型別是ResponseEntity可以不寫@ResponseBody註解,寫了也沒有關係。
* <p>
* 簡單粗暴的講,個人理解:
*@ResponseBody可以直接返回Json結果,
*@ResponseEntity不僅可以返回json結果,還可以定義返回的HttpHeaders和HttpStatus
*/
@RequestMapping("/download")
public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam String filename) throws IOException {
//檔案所在位置
String downloadFilePath = request.getSession().getServletContext().getRealPath("/uploud");
//獲取要下載的檔案
File file = new File(downloadFilePath, filename);
//http頭資訊設定一些約束之類的東西
HttpHeaders headers = new HttpHeaders();
//設定編碼為了解決中文名稱亂碼問題
String downloadFileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");
//將編碼加到http頭資訊中
headers.setContentDispositionFormData("attachment", downloadFileName);
/**
* MediaType:網際網路媒介型別
* contentType:具體請求中的媒體型別資訊
* MediaType: 很多常量多種型別可設定
* APPLICATION_OCTET_STREAM:二進位制流資料(如常見的檔案下載)
*
* 還有一種常見的:
*MULTIPART_FORM_DATA: 需要在表單中進行檔案上傳時,就需要使用該格式
*/
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
/**
* FileUtils.readFileToByteArray:讀取檔案到位元組陣列
*
* CREATED:201狀態碼:建立
*
* 簡而言之,個人理解:
*建立/下載 一個根據http頭資訊約束的 位元組陣列(檔案)
*/
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}