java做导出提示

总体的思路:

是在点击导出按钮时获得一个时间戳并把时间戳填充到form表单中发送给后台,后台响应成功后把发送的时间戳设置为cookie值,前端实时监测cookie值和前端的时间戳是否相等,相等就说明文件导出成功,提示导出结果。

难点:流写入到浏览器中,但是没有办法判断浏览器什么时候下载完成。

具体看代码实现:

前端表单提交提交date

var date=new Date().getTime();//获取时间
html.push('<input type="text" name="date" value="'+date+'" />');//添加到表单
$('#exportForm').submit().remove();//表单提交

后端导出方法时候,加入一段添加cookie的逻辑:
 

 response.setHeader("Content-type", "text/html;charset=UTF-8");
            response.setContentType("application/vnd.ms-excel");
            Cookie cookie = new Cookie("D" + date, date + "," + size);//将时间戳设置到cookie中
            cookie.setMaxAge(20000);//设置cookie生存时间,可调小一点
            response.addCookie(cookie);//添加cookie

前端加一段轮询代码:


		var time = setInterval(function () {//定时器检测cookie ,通过cookie  updateStatus 的值判断下载是否完成
            var ck = getCookies("D"+date);//getCookies()方法是根据论坛资料自己搜索后写的,感谢csdn和提供资料的前辈,具体忘了哪位提供的啦。。。
            if (ck.split(",")[0] == date) //值为success时,即为下载(到本地)完成了。
            {
            	if(ck.split(",")[1] <= 40000){
            		jAlert("导出成功"+ck.split(",")[1]+"行<br />导出最大支持40000行");
            	}else{
            		jAlert("导出成功40000行<br />导出最大支持40000行");
            	}
                clearInterval(time);//清理定时器。
            }
        }, "1000")  //每秒运行1次。

轮询代码的函数getCookie:

function getCookies(cookieKey) { 
    var cookies = document.cookie.split(';');//把cookie分开为[]。
    for (var i = 0; i < cookies.length; i++)//遍历cookie[]。
    {
        var keyValues = cookies[i].split('=');        //cookie是字符串形式的name1=value1通过分号';'联合起来的,
        if (cookieKey == keyValues[0].trim()) //第0个(第一个)是key
        {
            return unescape(keyValues[1]).replace("\"","").replace("\"",""); //返回想要的key对应的value(key:value形式键值对)。
        }
    }
    return null;//没有想要的值,返回null。
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值