SpringMvc 文件下載 詳解



  最近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);}
相關文章
相關標籤/搜索