zoukankan      html  css  js  c++  java
  • js下载文件,判断文件是否返回

      下载之前用的window.location.href下载的,但是这个判别不了文件是否返回,小文件倒还好,大的文件长时间没有下载也没有加载条什么的,用户有时会点击下载好几下,大的数据很容易将服务拖垮,所以决定改良下,参考网上大神的,大概思路是:用ifram标签下载,追加到文档,下载完成移除,前端带一个时间戳的cookie,后台接收,下载完成之后返回,前端一个定时循环的函数去验证是不是返回了时间戳,如果是确认下载成功

      前端代码:

      

    $("#mylink").click(function () {
                    var iframe=document.createElement("iframe");
                    //指定iframe的路径
                    iframe.src= dss.rootPath + "plugin/sjwfx/NineAddressNoLeisUreExport";
                    $(iframe).css("display","none");
                    //开始“数据正在加载”的进度条,提示用户在导出数据
                    dss.alert("正在为您导出数据,请稍后片刻");
                    dss.load(true);
                    //追加元素到文档
                    document.body.appendChild(iframe);
                    //每隔一秒循环下里面代码,如果是我返回的值,关闭加载
                    var interval = setInterval(function(){
                        //获取返回的cookie
                        var down = dss.cookie.get("resultId");
                        if(down=="75941785"){
                            //隐藏“数据正在加载”的进度条
                            dss.load(false);
                            $(iframe).remove();
                            //关闭循环的时间函数
                            clearInterval(interval);
                        }
                    },1000);
    
                });

    后台添加这么几行代码:

         Cookie cookie=new Cookie("resultId","75941785");//将时间戳设置到cookie中
            cookie.setPath("/");//可能会出现前端js读取不到,所以设置下
            cookie.setMaxAge(10);//设置cookie生存时间,可调小一点
            response.addCookie(cookie);//添加cookie

    我前端没有带上时间戳,因为iframe的关系,我这是iframe嵌在iframe里面的,后台一直读取不到我带的cookie,百度了很多没有很好的解决办法,所以我是直接在后台带上值,前端识别,我是设置了cookie时间为十秒就失效,注意:后台如果配置文件配置了http-only,前端js是不能读取操作的,还有就是setPath不是必须带的,如果前端读取不到,试着带下,或者指定你的项目名。

  • 相关阅读:
    _ 下划线 Underscores __init__
    Page not found (404) 不被Django的exception中间件捕捉 中间件
    从装修儿童房时的门锁说起
    欧拉定理 费马小定理的推广
    线性运算 非线性运算
    Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁
    Avoiding Full Table Scans
    批量的单向的ssh 认证
    批量的单向的ssh 认证
    Corrupted MAC on input at /usr/local/perl/lib/site_perl/5.22.1/x86_64-linux/Net/SSH/Perl/Packet.pm l
  • 原文地址:https://www.cnblogs.com/grasslucky/p/10945209.html
Copyright © 2011-2022 走看看