<font size=4> web
一、
文件下載是web項目中經常使用的服務,在springmvc中經常使用ResponseEntity類來事項文件下載spring
二、ResponseEntity
ResponseEntity類實現響應頭、文件數據(以字節存儲)、狀態封裝在一塊兒交給瀏覽器處理以實現瀏覽器的文件下載。簡單的說ResponseEntity能夠折這HttpHeaders和HttpStatus,經過對HttpHeaders和HttpStatus的設置能夠使瀏覽器執行下載操做。瀏覽器
三、實現文件下載
步驟:mvc
- 獲取到文件的存放的真實路徑
- 根據接收到的文件名和文件真實路徑建立文件實例(注意:這裏不是建立一個文件,而是建立一個File型的實例)
- 設置響應頭Content-Disposition瀏覽器根據這個響應頭執行相應的操做和要下載的文件名
- 設置響應內容的MIME類型,以二進制流形式傳輸
- 返回ResponseEntity
具體代碼:app
@RequestMapping("/download") public ResponseEntity<byte[]> download(@RequestParam("fileName") String fileName, HttpServletRequest req) throws IOException { // 獲取文件存放的真實路徑 String realPath = req.getServletContext().getRealPath("/WEB-INF/file"); //建立文件實例 File file = new File(realPath, fileName); //修改文件名的編碼格式 String downloadFileName = new String(fileName.getBytes("UTF-8"), "UTF-8"); //設置httpHeaders,使瀏覽器響應下載 HttpHeaders headers = new HttpHeaders(); //告訴瀏覽器執行下載的操做,「attachment」告訴了瀏覽器進行下載,下載的文件 文件名爲 downloadFileName headers.setContentDispositionFormData("attachment", downloadFileName); //設置響應方式爲二進制,以二進制流傳輸 headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); }
四、火狐瀏覽器測試
從圖中咱們能夠看到,咱們設置的Content-Disposition起效果,傳輸類型也爲二進制。 測試