Web 文件(圖片)下載

對Servlet的響應,以告知瀏覽器下載文件:

       需要對http響應協議設置:

      1:設置響應頭--內容接收程序--瀏覽器看到這個響應頭,就會把它認爲的下載程序打開

           (如果識別迅雷那麼就會自動打開迅雷,如果沒有其它的則打開一個“文件另存爲”的對話框

           response.setContentType("application/force-download");

     2:設置響應頭--告訴瀏覽器:文件名+文件類型
           String fileName = "歡迎文件名.jpg";

           response.setHeader("Content-Disposition", "attachment;filename=\""+fileName+"\"");//注意,“attachment;” 不能少,否則瀏覽器會直接在新窗口中打開

    3:上面的fileName會亂碼,在setheader前解決中文文件名亂碼問題

          適用於ie/360等瀏覽器。

          fileName = URLEncoder.encode(fileName,"utf-8");

         火狐設置:

          fileName=new String(fileName.getBytes("utf-8"), "ISO8859-1");

    4:向瀏覽器發送要下載的文件數據

   

                String realPath = getServletContext().getRealPath("/imgs/1.jpg");//真正下載的文件數據在這裏
		InputStream in = new FileInputStream(realPath);
		OutputStream out = response.getOutputStream();
		byte buf[] = new byte[1024];
		int len=0;
		while( (len=in.read(buf))!=-1){
			out.write(buf, 0, len);
		}
完整的程序(實現多瀏覽器支持):

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
        
		response.setContentType("application/force-download");
		response.setCharacterEncoding("utf-8");
		String fileName="圖片下載.gif";
		if(request.getHeader("user-agent").contains("Firefox"))//判斷是否爲火狐
			fileName=new String(fileName.getBytes("utf-8"), "ISO8859-1");
		else
			fileName=URLEncoder.encode(fileName, "utf-8");
		response.setHeader("Content-Disposition", "attachment;filename=\""+fileName+"\"");
		String filePath=getServletContext().getRealPath("/images/no laugh.gif");
		
		OutputStream out=response.getOutputStream();
		byte[] buf=new byte[1024];
		FileInputStream fin=new FileInputStream(new File(filePath));
		int len=0;
		while((len=fin.read(buf))!=-1){
			out.write(buf, 0, len);
		}
		fin.close();out.flush();out.close();
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章