• 通过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>
    

      

      运行截图:

    接收文件展开截图

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

  • 相关阅读:
    poj3608Bridge Across Islands(旋转卡壳)
    旋转卡壳(rotate吧)
    旋转卡壳(rotate吧)
    poj2187 Beauty Contest
    poj2187 Beauty Contest
    poj1637 Sightseeing tour
    poj1637 Sightseeing tour
    bzoj2756 [SCOI2012]奇怪的游戏
    bzoj2756 [SCOI2012]奇怪的游戏
    noip胡测之8.15(没有正解)
  • 原文地址:https://www.cnblogs.com/foren/p/6247890.html
Copyright © 2020-2023  润新知