天易42----java实现文件下载工具类

一:java代码片段

 
/**
  * <p>
  * 文件下载
  * </p>
  * @param request 
  * @param response 
  * @param filePath 文件路径
  * @throws Exception 下载过程中出现异常
  */
 public static boolean fileDownLoad(HttpServletRequest request,
         HttpServletResponse response, String filePath) throws Exception {
	 boolean bl=false;
     if (response != null && request != null && filePath != null
             && !filePath.equals("")) {
    	 String browserType=request.getParameter("browserType");
         final String userAgent = request.getHeader("USER-AGENT");
         logger.info("userAgent==:"+userAgent);

         // filePath是指欲下载的文件的路径。
         filePath = URLDecoder.decode(filePath,"UTF-8");
         File file = new File(filePath);
         if(!file.exists()){
        	 logger.info("############ FilePath: "+filePath);
             throw new Exception("文件不存在!");
         }
         if(!file.isFile()){
        	 logger.info("############ FilePath: "+filePath);
             throw new Exception("非文件类型!");
         }
         
         // 取得文件名。
         String fileName = file.getName();
         if ("IE".equals(browserType)) {// IE浏览器,页面传过来的值,只用于判断是否为IE浏览器
        	 logger.info("ie浏览器");
             fileName = URLEncoder.encode(fileName, "UTF8");
         } else {
        	if (userAgent.contains("Mozilla")) {// google,火狐浏览器
             fileName = new String(fileName.getBytes(), "ISO8859-1");
             logger.info("火狐浏览器");
	         } else {
	        	 logger.info("其他浏览器");
	             fileName = URLEncoder.encode(fileName, "UTF8");// 其他浏览器
	         }
         }
         // 提示框设置
         response.reset(); // reset the response
         // response.setCharacterEncoding("UTF-8");
         response.setContentType("application/octet-stream");//告诉浏览器输出内容为流
         response.setHeader("content-disposition", "attachment; filename=\""
                 + fileName + "\"");
         
         //读出文件到i/o流  
         FileInputStream fis=new FileInputStream(file);  
         BufferedInputStream buff=new BufferedInputStream(fis); 
         byte [] ary_byte=new byte[1024];//缓存  
         long k=0;//该值用于计算当前实际下载了多少字节  
         // 输出流
         OutputStream out =  response.getOutputStream();
         //开始循环下载  
         while(k<file.length()){  
             int j=buff.read(ary_byte,0,1024);  
             k+=j;  
             //将b中的数据写到客户端的内存  
             out.write(ary_byte,0,j);  
         }  
         // 关闭输出流
         if (out != null) {
             out.flush();
             out.close();
             fis.close();
             buff.close();
         }
         bl=true;
         logger.info("文件下载完毕!");
     } else {
         new NullPointerException(
                 "HttpServletRequest Or HttpServletResponse Or fileName Is Null !");
     }
     return bl;
 }

二:页面判断是否为IE浏览器代码

/点击下载
	function assessDataOnload(){
		var browser="";
			if (window.navigator.userAgent.indexOf("MSIE") >= 1) {  
				browser="IE";
	        }
		  if($("[name='choose']:checked").length){
			if(confirm("确定要下载已选中的数据吗?")){
				var str = "";
				$("[name='choose']:checked").each(function(){
					str+=$(this).data("id")+",";
				});
				window.open("../assessDownLoad/downLoadData.do?browserType="+browser+"&id="+str,"_blank");
			}
		}else{
			alert("请选择要下载的数据!");
		} 
	}



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值