利用cookie判断文件下载完成
在网页下载文件时,该文件又是通过后台代码生成的,比如报表之类的。当需要生成文件过大时会耗费很多时间,而文件生成好传到页面的时候也没有事件可以监听它,像微软官网,谷歌,百度等下载方式都是通过提示五秒过后开始下载,如未下载点击链接的方式,可以去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判断文件下载完成的更多相关文章
- 如何利用cookie来保存用户登录账号
众所周知,cookie在网页编写中不接或缺,今天就谈谈如何利用cookie技术来保存用户登录账号 1.首先是否保存用户登录账号当然是用户自行决定,所以我们需要在用户登录界面设置一个复选框,以此取得用户 ...
- Servlet 利用Cookie实现一周内不重复登录
import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import ...
- 利用Cookie保存用户身份信息实现免登录
<%@page import="sun.misc.BASE64Encoder"%> <%@page import="java.util.Base64.E ...
- 利用 cookie 模拟网站登录
import urllib import urllib2 import cookielib filename = 'cookie.txt' \#声明一个MozillaCookieJar对象实例来保存c ...
- 【原创】js中利用cookie实现记住密码功能
在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: HttpServletRequest request HttpServletResponse res ...
- 利用try-catch判断变量是已声明未声明还是未赋值
原文 利用try-catch判断变量是已声明未声明还是未赋值 这篇文章主要介绍了利用try-catch判断变量是已声明未赋值还是未声明,需要的朋友可以参考下 目的是如果一个变量是已声明未赋值,就可以直 ...
- 利用HTML5判断用户是否正在浏览页面技巧
现在,HTML5里页面可见性接口就提供给了程序员一个方法,让他们使用visibilitychange页面事件来判断当前页面可见性的状态,并针对性的执行某些任务.同时还有新的document.hidde ...
- Python3之利用Cookie模拟登录
Python3之利用Cookie模拟登录 利用Cookie模拟登录步骤: 1. 在浏览器输入http://demo.bxcker.com,输入用户名和密码登录. 2.登录成功点" ...
- js中利用cookie实现记住密码功能
在登录界面添加记住密码功能,代码如下: //设置cookie var passKey = '4c05c54d952b11e691d76c0b843ea7f9'; function setCookie( ...
随机推荐
- mybatis传入参数类型parameterType详解
前言 Mybatis的Mapper文件中的select.insert.update.delete元素中都有一个parameterType属性,用于对应的mapper接口方法接受的参数类型. ( res ...
- How many integers can you find HDU - 1796_容斥计数
Code: #include<cstdio> using namespace std; typedef long long ll; const int R=13; ll a[R]; ll ...
- 洛谷P2827 蚯蚓 队列 + 观察
我们不难发现先被切开的两半一定比后被切开的两半大,这样就天然的生成了队列的单调性,就可以省去一个log.所以,我们开三个队列,分别为origin,big,smallorigin, big, small ...
- 实验二:编写输出"Hello World!"
1.首先打开eclipse这个软件,新建Java项目,执行“文件→ 新建→Java项目 ”菜单命令,打开新建Java对话框,在项目名的编辑框中输入项目名编写输出"Hello World!”, ...
- Python面向对象----封装
1. Python语言不是强类型语言, 公有和私有体现的不是很明显.私有成员可以通过 对象._ClassName__私有成员进行访问 2. 使用封装借助了装饰器 其实具有类get和set等操作
- oracle删除非空的表空间
oracle删除非空的表空间: drop tablespace tablespaceName including contents;
- Jquery Math ceil()、floor()、round()比较与用法
Math.ceil():向上取值 如:Math.ceil(2.1) -- 结果为 3 Math.ceil(-2.1) -- 结果为-2 结论:正入 负舍 Math.floor(): 先下取值 入 ...
- NYIST 119 士兵杀敌(三)
士兵杀敌(三)时间限制:2000 ms | 内存限制:65535 KB难度:5 描述南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出 ...
- @responsebody注解的作用就是让viewresolver不起作用,不返回视图名称而是直接返回的return object
@responsebody注解的作用就是让viewresolver不起作用,不返回视图名称而是直接返回的return object 2.也可以再方法上添加@ResponseBody注解, 用于这个类里 ...
- R语言的帮助使用和图形功能简单介绍
R语言的帮助使用和图形功能简单介绍 R语言帮助,在Windows桌面下,有很多种.最长使用的是在命令行下help() > help.start() 会在浏览器中,打开帮助的主页 watermar ...