利用cookie判断文件下载完成
2024-10-01 12:09:18
在网页下载文件时,该文件又是通过后台代码生成的,比如报表之类的。当需要生成文件过大时会耗费很多时间,而文件生成好传到页面的时候也没有事件可以监听它,像微软官网,谷歌,百度等下载方式都是通过提示五秒过后开始下载,如未下载点击链接的方式,可以去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或者轮询等方式从数据库读取标志。
最新文章
- linux @后面的主机名如何修改
- Magento显示多货币,Magento 多货币设置
- Unity3D引擎扩展中的编辑器定制方法
- JavaScript的作用域和闭包
- BZOJ 1565 植物大战僵尸(最大权闭合图)
- Children's Day
- 关于Redis的一些常识
- servlet &; javabean
- python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)
- MongoDB 用户管理
- ActiveX 控件
- 安装php_sqlsrv扩展
- sqlserver 数据分发复制 发布订阅
- 【转】VISUAL STUDIO 2008代码指标为您节省资金
- ethereum &; ETC
- MAC下安装Homebrew 和 @权限的问题
- 安装好php后找不到php.ini
- 使用Python调用动态库
- 跑对抗样本库 CleverHans 的例子时,遇到的问题
- upload-labs19记录