Web 文件(图片)下载

12 篇文章 0 订阅
11 篇文章 0 订阅

对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();
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值