java web 文件下載的實現

以前的思路一直是彈出一個框問用戶想要存放文件的位置,而後我再生成個文件放到那。然而我這個想法並無成功。
前端

點擊連接來下載文件的方式很簡便,後臺把文件流輸出來,經過瀏覽器實現下載功能,包括詢問位置與文件存放,大多數瀏覽器會配置一個固定位置,不必定每次都問。java

前端就很是簡單了,一個<a>標籤,href=「後臺方法地址」,若是你的需求不能直接用超連接方式,能夠在js裏寫 window.location.href =「後臺方法地址」。ajax

這樣跳轉到後臺方法後瀏覽器

String filePath = this.getClass().getClassLoader().getResource("").toURI().getPath()
					+ "/exportPdf.pdf";  //文件在項目中的路徑
		File outfile = new File(filePath);
		String filename = outfile.getName();// 獲取文件名稱
		InputStream fis = new BufferedInputStream(new FileInputStream(
					filePath));
		byte[] buffer = new byte[fis.available()];  
		fis.read(buffer);  //讀取文件流
		fis.close();
		response.reset();  //重置結果集
		response.addHeader("Content-Disposition", "attachment;filename="
				+ new String(filename.replaceAll(" ", "").getBytes("utf-8"),
				"iso8859-1"));  //返回頭 文件名
		response.addHeader("Content-Length", "" + outfile.length());  //返回頭 文件大小
		response.setContentType("application/octet-stream");    //設置數據種類
		//獲取返回體輸出權
		OutputStream os = new BufferedOutputStream(response.getOutputStream());  
		os.write(buffer); // 輸出文件
		os.flush();
		os.close();

瀏覽器會直接識別這種形式的文件輸出,彈出對話框。app

注意此方法必定要用連接方式調後臺,使用ajax和XMLHttpRequest方式都是不行的,這樣返回的文件流會返回到方法的回調函數中,固然若是你想在js中獲取文件,這樣也行。函數

相關文章
相關標籤/搜索