• 通过XmlHttpRequest实现带进度条异步下载文件


    本博文源自技术群的讨论,因为网上找不到实现这样效果的的代码,而我说没问题,可以实现,因此有人质疑我是否能做到,呵呵,现将我实现代码贴出如下,希望有兴趣的同学可以继续完善:

    本代码仅做技术展现,请勿探讨其他细节。。。。

    <!DOCTYPE html>
    <html>
    <head>
        <title>Test XMLHttpRequest download with progress bar</title>
        <script type="text/javascript" src="/js/jquery-2.2.0.js"></script>   
    </head>
    <body>
        <div style="600px;margin:10px auto;background-color:#fff;">
            <input id="DownLoadFile" type="button" value="DownLoadFile" />
            <div style="height:8px;100px;border-radius:3px;border:1px solid #eee;">
                <div id="progressBar" style="background-color:#ccf;height:6px;0px;border-radius:3px;border:0px;"></div>
            </div>
        </div>
      </body>
    </html>
    <script type="text/javascript">    
        var onProgress = function (e) {
            if (e.lengthComputable) {
                document.getElementById("progressBar").style.width = Math.round(e.loaded * 100 / e.total) + 'px';
            }
        };
        $(function () {
            $('#DownLoadFile').on('click', function () {
                var xhr = new XMLHttpRequest();
                xhr.onprogress = onProgress; //下载监听
                xhr.responseType = "blob";
                xhr.open("GET", "http://localhost:36348/Doc/TortoiseSVN-1.9.4.27285-x64.zip", true);
                xhr.onreadystatechange = function (e) {
                    if (this.readyState == 4 && this.status == 200) {
                        var response = this.response;
                        var URL = window.URL || window.webkitURL || window;
                        var link = document.createElement('a');
                        link.href = URL.createObjectURL(response);
                        link.download = 'TestDownLoad';
                        //link.click(); //ie及firefox不响应识别模拟点击事件
                        //下面方法,edge,chrome和firefox都兼容
                        var event = document.createEvent('MouseEvents');
                        event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                        link.dispatchEvent(event);
                    }
                }
                xhr.send(null);
                return false;
            });
        });
    </script>
    

      

      运行截图:

    接收文件展开截图

    注意:大家再现效果的时候,选择下载的文件不能太小,否则进度条不会显示!!

  • 相关阅读:
    luogu4365 秘密袭击 (生成函数+线段树合并+拉格朗日插值)
    [模板]左偏树
    luogu4166 最大土地面积 (旋转卡壳)
    bzoj3168 钙铁锌硒维生素 (矩阵求逆+二分图最小字典序匹配)
    [模板]矩阵树定理
    [模板]快速傅里叶变换(FFT)
    [模板]Min_25筛
    [模板]杜教筛
    [模板]莫比乌斯反演
    DrawerLayout—侧拉栏的使用
  • 原文地址:https://www.cnblogs.com/foren/p/6247890.html
Copyright © 2020-2023  润新知