在网页下载文件时,该文件又是通过后台代码生成的,比如报表之类的。当需要生成文件过大时会耗费很多时间,而文件生成好传到页面的时候也没有事件可以监听它,像微软官网,谷歌,百度等下载方式都是通过提示五秒过后开始下载,如未下载点击链接的方式,可以去idea官网下载idea看效果。但这种下载文件都是预先就有的,所以很快就能开始下载。当生成报表就需要几分钟当时候这个时间就不能接受了,目前也没有特别有效当方法进行监听下载开始当事件。另辟蹊径利用cookie模拟下载完成事件。

  前端代码如下:

var url=""
var iframe=document.createElement("iframe");
iframe.src=url;
$(iframe).css("display","none");
//显示等待提示
showMask();
var downId=new Date().getTime();//以时间戳来区分每次下载
document.body.appendChild(iframe)
var interval=setInterval(function(){
var down=getCookie("D"+downId);
if(down==downId){
//隐藏等待提示,下载完成
hideMask();
. $(iframe).remove();
}
},1000);

java代码如下:

String downTime=request.getParameter("downId");//获取下载的时间戳
Cookie cookie=new Cookie("D"+downTime,downTime);//将时间戳设置到cookie中
cookie.setMaxAge(20000);//设置cookie生存时间,可调小一点
response.addCookie(cookie);//添加cookie

  在前端首先要有个获取cookie的方法,可参考获取浏览器cookie。后台在报表生成完成准备将文件流导入进response之前将下载时的时间戳设置到cookie中,

然后在前台循环读取当前下载的时间戳,当读到这个时间戳时代表后台报表已经生成完成,即将开始下载。注意生存时间不能过短,最少要三个循环时间,可设置长一点,也不宜过长,不然下载太多会造成cookie超长。

  这个方法是利用浏览器当cookie来侧面判断下载当时间。当浏览器禁用当cookie这个效果就不能实现来。还可以通过数据库来实现,原理和cookie当方式类似,只不过把标志存储到数据库来。在前端利用websocket或者轮询等方式从数据库读取标志。

利用cookie判断文件下载完成的更多相关文章

  1. 如何利用cookie来保存用户登录账号

    众所周知,cookie在网页编写中不接或缺,今天就谈谈如何利用cookie技术来保存用户登录账号 1.首先是否保存用户登录账号当然是用户自行决定,所以我们需要在用户登录界面设置一个复选框,以此取得用户 ...

  2. Servlet 利用Cookie实现一周内不重复登录

    import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import ...

  3. 利用Cookie保存用户身份信息实现免登录

    <%@page import="sun.misc.BASE64Encoder"%> <%@page import="java.util.Base64.E ...

  4. 利用 cookie 模拟网站登录

    import urllib import urllib2 import cookielib filename = 'cookie.txt' \#声明一个MozillaCookieJar对象实例来保存c ...

  5. 【原创】js中利用cookie实现记住密码功能

    在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: HttpServletRequest request HttpServletResponse res ...

  6. 利用try-catch判断变量是已声明未声明还是未赋值

    原文 利用try-catch判断变量是已声明未声明还是未赋值 这篇文章主要介绍了利用try-catch判断变量是已声明未赋值还是未声明,需要的朋友可以参考下 目的是如果一个变量是已声明未赋值,就可以直 ...

  7. 利用HTML5判断用户是否正在浏览页面技巧

    现在,HTML5里页面可见性接口就提供给了程序员一个方法,让他们使用visibilitychange页面事件来判断当前页面可见性的状态,并针对性的执行某些任务.同时还有新的document.hidde ...

  8. Python3之利用Cookie模拟登录

    Python3之利用Cookie模拟登录 利用Cookie模拟登录步骤: 1.       在浏览器输入http://demo.bxcker.com,输入用户名和密码登录. 2.登录成功点" ...

  9. js中利用cookie实现记住密码功能

    在登录界面添加记住密码功能,代码如下: //设置cookie var passKey = '4c05c54d952b11e691d76c0b843ea7f9'; function setCookie( ...

随机推荐

  1. 对服务器磁盘、CPU、内存使用状态,设置163邮件告警

    1,桥接模式可上网,首先你的邮箱已经开通yum -y install mailx dos2unix.x86_64  mailx -V[root@localhost ~]# vim /etc/mail. ...

  2. C++继承与组合

    转自https://blog.csdn.net/caoyan_12727/article/details/52337297 类的组合和继承一样,是软件重用的重要方式.组合和继承都是有效地利用已有类的资 ...

  3. 网络流入门——EK算法

    转载:https://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html 网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点. ...

  4. 计蒜客 时间复杂度 (模拟) & 洛谷 P3952 时间复杂度

    链接 : Here! 思路 : 这是一道大模拟, 区分好情况就没问题了 循环构成部分 : $F , x , i , j$ 和 $E$ , 需要注意的是 $i , j$, - 分析 $i, j$ 的情况 ...

  5. 深入理解Java中的锁

    转载:https://www.jianshu.com/p/2eb5ad8da4dc Java中的锁 常见的锁有synchronized.volatile.偏向锁.轻量级锁.重量级锁 1.synchro ...

  6. MySQL 存储

    1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户 ...

  7. 转载:Java编程风格与命名规范整理

    转载自:传送门 不想复制,点进去看喽23333333

  8. HDU 4355

    只能说感觉是三分吧,因为两端值肯定是最大的,而中间肯定存在一点使之最小,呃,,,,猜 的... #include <iostream> #include <cstdio> #i ...

  9. HDOJ 3339 In Action

    最短路+01背包 In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  10. 怎样在Java中运行Hive命令或HiveQL

    这里所说的在Java中运行Hive命令或HiveQL并非指Hive Client通过JDBC的方式连接HiveServer(or HiveServer2)运行查询,而是简单的在部署了HiveServe ...