java做导出提示

我只是一个虾纸丫 提交于 2020-03-10 20:18:35

总体的思路:

是在点击导出按钮时获得一个时间戳并把时间戳填充到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。
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!