1. 程式人生 > >響應頭Content-disposition,通知瀏覽器以附件形式去下載檔案

響應頭Content-disposition,通知瀏覽器以附件形式去下載檔案

	1.Content-disposition響應頭的作用:通知瀏覽器處理內容的方式以附件的形式下載。
	2.在現實開發中很多時候我們都需要提供相應的功能給使用者下載附件。比如:智聯招聘(下載簡歷), 百度雲(下載資料)
	3.程式碼
	程式碼:
	import java.io.FileInputStream;
	import java.io.IOException;
	import java.io.OutputStream;
	import java.net.URLDecoder;
	import java.net.URLEncoder;
	import java.util.UUID;
	 
	import javax.servlet.ServletException;
	import javax.servlet.http.HttpServlet;
	import javax.servlet.http.HttpServletRequest;
	import javax.servlet.http.HttpServletResponse;
	 
	//需求: 向瀏覽器輸出一張圖片,然後通知瀏覽器以附件的形式處理。
	public class ContentDispositionServlet extends HttpServlet {
	 
		public void doGet(HttpServletRequest request, HttpServletResponse response)
				throws ServletException, IOException {
			//uuid可以保證產生的字串是全球唯一的,  uuid是通過:cpu序列號+當前毫秒數算出的值。
			String uuidFileName = UUID.randomUUID().toString();  //產生一個uuid
			
			String fileName = uuidFileName+".jpg";
			//對檔案進行url編碼
	    //fileName = URLEncoder.encode(fileName, "utf-8");   // 解決了90%的瀏覽器, firefox瀏覽器解決不了。 
			
			//設定content-disposition響應頭,通知瀏覽區以附件的形式下載處理。
			response.setHeader("Content-Disposition", "attachment;filename="+fileName);
			
			OutputStream out = response.getOutputStream();
			
			//建立檔案的輸入流,讀取本地的圖片資源
			FileInputStream fileInputStream = new FileInputStream("c:/pig/8.jpg");
			//建立緩衝位元組陣列讀取
			byte[]  buf = new byte[1024];
			int length = 0 ;
			//不斷的讀取了圖片的資源
			while((length=fileInputStream.read(buf))!=-1){
				//向瀏覽器輸出
				out.write(buf,0,length);
			}
			//關閉 資源
			fileInputStream.close();
			
		}
	 
		public void doPost(HttpServletRequest request, HttpServletResponse response)
				throws ServletException, IOException {
			doGet(request, response);
		}
	 
	}