zoukankan      html  css  js  c++  java
  • js 文件下载 进度条

    js:

     /**
      * 下载文件 - 带进度监控
      * @param url: 文件请求路径
      * @param params: 请求参数
      * @param name: 保存的文件名
      * @param progress: 进度处理回调函数
      * @param success: 下载完成回调函数
      * eg: progressDownLoad({url:'http://loacalhost:8080/downLoad.action',name:'file.rar',progress:function(evt){
      *        console.log(evt);
      *     }});
      **/
      function progressDownLoad({url,filename,params,progress,success}){
          var xhr = new XMLHttpRequest();
          xhr.open("POST", url, true);
          //监听进度事件
          xhr.addEventListener("progress", function (evt) {
              if(progress) try{ progress.call(evt); }catch(e){}
          }, false);
    
          xhr.responseType = "blob";
          xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
          xhr.onreadystatechange = function () {
              if (xhr.readyState === 4 && xhr.status === 200) {
                  if (typeof window.chrome !== 'undefined') {
                      // Chrome version
                      var link = document.createElement('a');
                      link.href = window.URL.createObjectURL(xhr.response);
                      link.download = filename;
                      link.click();
                  } else if (typeof window.navigator.msSaveBlob !== 'undefined') {
                      // IE version
                      var blob = new Blob([xhr.response], { type: 'application/force-download' });
                      window.navigator.msSaveBlob(blob, filename);
                  } else {
                      // Firefox version
                      var file = new File([xhr.response], filename, { type: 'application/force-download' });
                      window.open(URL.createObjectURL(file));
                  }
                  if(success) try{ success.call(xhr); }catch(e){}
              }
          };
          // FormData
          //var formData = new FormData();
          var paramsStr = '';
          if(params) for (var key in params) paramsStr += '&'+key+'='+params[key];
          if(paramsStr) paramsStr = paramsStr.substring(1);
    
          xhr.send(paramsStr);
      }

    XMLHttpRequest的监听事件:

    onabort

    当请求中止时触发

    onload

    当请求成功时触发

    onloadend

    在请求成功或者失败时触发;load、abort、error、timeout事件发生之后

    onloadstart

    当请求开始时触发

    onreadystatechange

    当readyStateChange属性改变时触发

    ontimeout

    当timeout属性指定的时间已经过去但响应依旧没有完成时触发

    onerror

    当请求因错误失败时触发。注意404等状态码不是error,因为此时响应仍然是成功完成的。

    onprogress

    当响应主体正在下载重复触发(约每隔50ms一次)

  • 相关阅读:
    2006百度之星
    使用StretchBlt之前一定要用SetStretchBltMode(COLORONCOLOR)
    算法学习建议(转)
    让ARM开发板上SD卡里的程序开机自动运行
    我的Dll(动态链接库)学习笔记
    WinCE 应用程序开机自动运行的又一种方法
    讲讲volatile的作用
    用Platform builder定制WinCE系统
    MFC如何高效的绘图
    利用c语言编制cgi实现搜索
  • 原文地址:https://www.cnblogs.com/xtreme/p/7744065.html
Copyright © 2011-2022 走看看