springmvc文件下載

<font size=4> web

一、

文件下載是web項目中經常使用的服務,在springmvc中經常使用ResponseEntity類來事項文件下載spring

二、ResponseEntity

ResponseEntity類實現響應頭、文件數據(以字節存儲)、狀態封裝在一塊兒交給瀏覽器處理以實現瀏覽器的文件下載。簡單的說ResponseEntity能夠折這HttpHeaders和HttpStatus,經過對HttpHeaders和HttpStatus的設置能夠使瀏覽器執行下載操做。瀏覽器

三、實現文件下載

步驟mvc

  1. 獲取到文件的存放的真實路徑
  2. 根據接收到的文件名和文件真實路徑建立文件實例(注意:這裏不是建立一個文件,而是建立一個File型的實例)
  3. 設置響應頭Content-Disposition瀏覽器根據這個響應頭執行相應的操做和要下載的文件名
  4. 設置響應內容的MIME類型,以二進制流形式傳輸
  5. 返回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起效果,傳輸類型也爲二進制。 測試

相關文章
相關標籤/搜索