1、实现原理

        计算出已经处理的数据记录数与所有需要导出的数据记录数的比例,根据每一个登陆用户的不同将比例存入缓存中,前台设计一个定时器,每隔一段时间去缓存中获取比例,然后根据比例来展示一下下载的进度。

2、具体代码实现

//下载比例的存储

long totalCount = 总记录数;

long a = i * 100 / totalCount;

cacheService.setCache(当前登陆用户ID+"特定的标志", a+"");



--------------------------------------------------------------------------------


//下载比例的获取

String cache = cacheService.getCache(当前登陆用户ID+"特定的标志");

if (cache == null) {
	cache = "0";
}
		
result.put("info", cache);

if("f".equals(cache)) {
	cacheService.setCache(session("F_UID")+"PROGRESS","0");
}
$("#export").click(function(){
    //通过ajax去下载
	$.ajax({
		
	});
	
    //显示进度条
	$("#myProgress").show();
	$("#myBarMsg").show();
	$("#myBarMsg").html("当前进度:0%");
	var elem = document.getElementById("myBar"); 
		var width = 0;
	
        //启动定时器
	var progressFunction = setInterval(progress, 1000);
        
        //定时器执行任务
        function progress(){
        	
        	$.ajax({
			type:"post",
			url:"", //获取缓存中下载进度的url
			data:{
				
			},
			success:function(data){
		 	 	
		 	 	if(data.info == 'f'){
		 	 		width = 100;
		 	 		elem.style.width = width + '%'; 
		 	 		$("#myBarMsg").html("当前进度:100%,导出成功!");
		 	 		clearInterval(progressFunction);
		 	 		
		 	 		setTimeout(function(){ 
		 	 				$("#myProgress").hide();
		 	 				$("#myBarMsg").hide(); 
		 	 				width = 0;
		 	 				elem.style.width = width + '%'; 
		 	 		}, 5000);
		 	 		
		 	 	}else{
		 	 		console.log("已经处理的数据条数:"+data.info);
		 	 		width = data.info; 
  						elem.style.width = width + '%'; 
  						$("#myBarMsg").html("当前进度:"+data.info+"%"+"    (<label style='color:red;'>导出过程中请不要切换目录,可打开新的窗口查看其他!</label>)");
		 	 	}
			},
			error:function(xmlHttpReq, textStatus, errorThrown){
				alert("导出失败,失败原因:" + textStatus+","+errorThrown);
			}
		});
			
        }

});
<!-- css -->
#myProgress {
  width: 100%;
  height: 30px;
  position: relative;
  background-color: #ddd;
  border-radius:5px;
}

#myBar {
  background-color: #4CAF50;
  width: 0px;
  height: 30px;
  position: absolute;
  border-radius:5px;
}



<!-- 下载进度 -->
<div id="myProgress" style="display:none;">
  	<div id="myBar"></div>
</div>
<div id="myBarMsg" z-index:100></div>