zhuyujin001 2022-05-25 15:50 采纳率: 100%
浏览 210
已结题

layui上传进度遇到的坑

 <div class="layui-upload">
  <button type="button" class="layui-btn layui-btn-normal" id="testList">选择多文件</button> 
  <div class="layui-upload-list" style="max-width: 1000px;">
    <table class="layui-table">
      <colgroup>
        <col>
        <col width="150">
        <col width="260">
        <col width="150">
      </colgroup>
      <thead>
        <tr><th>文件名</th>
        <th>大小</th>
        <th>上传进度</th>
        <th>操作</th>
      </tr></thead>
      <tbody id="demoList"></tbody>
    </table>
  </div>

</div>  



//创建监听函数
  var xhrOnProgress = function(fun) {
    xhrOnProgress.onprogress = fun; //绑定监听
    //使用闭包实现监听绑
    return function() {
      //通过$.ajaxSettings.xhr();获得XMLHttpRequest对象
      var xhr = $.ajaxSettings.xhr();
      //判断监听函数是否为函数
      if (typeof xhrOnProgress.onprogress !== 'function')
        return xhr;
      //如果有监听函数并且xhr对象支持绑定时就把监听函数绑定上去
      if (xhrOnProgress.onprogress && xhr.upload) {
        xhr.upload.onprogress = xhrOnProgress.onprogress;
      }
      return xhr;
    }
  }


/*多压缩文件上传*/
element.init();
var uploadListIns = upload.render({
    elem: '#testList'
    ,elemList: $('#demoList') //列表元素对象
    ,url: commondata.layui_ajaxurl //上传接口
    ,accept: 'file'
    ,field:'rar_file_up'
    ,multiple: true
    ,number: 5
    ,auto: true
    ,data:{action:"sjone_rar_vjup"}
    ,size:1024*1024*2
    ,bindAction: '#testListAction'
    ,choose: function(obj){   
      var that = this;
      var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
      //读取本地文件
      obj.preview(function(index, file, result){
        var tr = $(['<tr id="upload-'+ index +'">'
          ,'<td>'+ file.name +'</td>'
          ,'<td>'+ (file.size/1014).toFixed(1) +'kb</td>'
          ,'<td><div class="layui-progress" lay-filter="progress-demo-'+ index +'"><div class="layui-progress-bar" lay-percent=""></div></div></td>'
          ,'<td>'
            ,'<button class="layui-btn layui-btn-xs demo-reload layui-hide">编辑</button>'
            ,'<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">删除</button>'
          ,'</td>'
        ,'</tr>'].join(''));
        
        //单个重传
        tr.find('.demo-reload').on('click', function(){
          obj.upload(index, file);
        });
        
        //删除
        tr.find('.demo-delete').on('click', function(){
          delete files[index]; //删除对应的文件
          tr.remove();
          uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
        });
        
        that.elemList.append(tr);
        element.render('progress'); //渲染新加的进度条组件
      });
    }
    ,done: function(res, index, upload){ //成功的回调
     console.log(res);
      var that = this;
      if(res.code == 1){ //上传成功
       
        var tr = that.elemList.find('tr#upload-'+ index)
        ,tds = tr.children();

        //tds.eq(3).html(''); //清空操作
        delete this.files[index]; //删除文件队列已经上传成功的文件

        return;
      }
      this.error(index, upload);
    }
    ,allDone: function(obj){ //多文件上传完毕后的状态回调
      console.log(obj)
    }
    ,error: function(index, upload){ //错误回调
      var that = this;
      var tr = that.elemList.find('tr#upload-'+ index)
      ,tds = tr.children();
      tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
    }
    ,xhr: xhrOnProgress
    ,progress: function(n, elem, e, index){ //注意:index 参数为 layui 2.6.6 新增
      element.progress('progress-demo-'+ index, n + '%'); //执行进度条。n 即为返回的进度百分比
      console.log(e);
     
    }

   ,xhr: function (index, e) {
      console.log(index);
      console.log(e);
        var percent = e.loaded / e.total;//计算百分比
        percent = parseFloat(percent.toFixed(2));
        element.progress('progress-demo-' + index + '', percent * 100 + '%');
        console.log("-----" + percent);

        }



  });

作者你好 ,我写layui上传进度那里遇到了个问题,就是无论上传的文件是10m还是900m的,进度条都是从0一瞬间就到100了,一样的速度。所以900m的文件进度条都是100后起码等了一分钟才返回成功上传的数据,帮忙看看我进度条哪里的问题啊,不能和文件真实上传速度一致,相差太远了

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 6月2日
    • 创建了问题 5月25日

    悬赏问题

    • ¥15 静电纺丝煅烧后如何得到柔性纤维
    • ¥15 (标签-react native|关键词-镜像源)
    • ¥100 照片生成3D人脸视频
    • ¥15 伪装视频时长问题修改MP4的时长问题,
    • ¥15 JETSON NANO
    • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
    • ¥20 关于 openpyxl 处理excel文件地问题
    • ¥15 MS中不知道高分子的构型怎么构建模型
    • ¥60 QQOP数据,什么是op数据号,怎么提取op数据!能不能大量提取(语言-c语言)
    • ¥15 matlab代码 关于微分方程和嵌套的分段函数。