zoukankan      html  css  js  c++  java
  • XMLHTTPREQUEST–获取上传文件的进度

    最近做了一个项目,其中一个需求是显示文件上传进度。由于对XMLHttpRequest对象的了解不够,以至于浪费了很多时间。今天主要来说一下XMLHttpRequest对象中获取文件上传进度的方法,
    代码如下:

    <input type="file" name="fileUpload" id="fileUpload" onchange="Upload();"/>  
    
    function Upload() {
    //获取上传文件
        var file = document.getElementById('fileUpload').files[0];  
      //创建表单数据
      var formData = new FormData();
      formData.append('file', file);
      //创建xhr对象
      var xhr = new XMLHttpRequest();
      xhr.open('POST', '请求路径', true);
      xhr.onload = uploadCom; //请求完成
      xhr.onerror =  uploadFail; //请求失败
      xhr.upload.onprogress = progressFunction;//上传进度调用方法实现
      xhr.send();
      xhr.onreadystatechange = function () {
              if (xhr.readyState === XMLHttpRequest.DONE) {
                if (xhr.status === 200) {
                    let body = JSON.parse(xhr.responseText);
                    let data= body.data;
                    self.setState({'to_user_arr':data})
                }else{
                   try{
                        let  msg = JSON.parse(xhr.responseText)["msg"];
                        message.error(msg,10);
                    }catch(e){}
                }
              }
            };
    }
    function progressFunction(evt) {
    // evt.total是需要传输的总字节,evt.loaded是已经传输的字节。如果evt.lengthComputable不为真,则evt.total等于0
    if (evt.lengthComputable) {//
           console.log('当前上传进度'+Math.round(evt.loaded / evt.total * 100) + "%")
                 }
            }
    //上传成功响应
    function uploadCom(evt) {
     //服务断接收完文件返回的结果
        alert("上传成功!");
    }
    //上传失败
    function uploadFail(evt) {
        alert("上传失败!");
    }
    //取消上传
    function cancleUpload(){
        xhr.abort();
    }
    
    

    XMLHttpRequest对象,传送数据的时候,有一个onprogress事件,用来返回进度信息。我们可以通过onprogress事件来实时显示进度,默认情况下这个事件每50ms触发一次。
    progressFunction函数中:
    1.total - 总的字节数
    2.loaded - 到目前为止上传的字节数
    3.lengthComputable - 可计算的已上传字节
    注:cancleUpload这个函数只要调用一下就能取消上传

    拓展:既然XMLHttpRequest对象可以获取上传进度,当然也可以或许下载进度。需要注意的是,上传过程和下载过程触发的是不同对象的onprogress事件:
    ① 上传触发的是xhr.upload对象的 onprogress事件
    ② 下载触发的是xhr对象的onprogress事件

  • 相关阅读:
    nodejs pm2使用
    react生命周期
    It's a start!
    关于react-native报错: Invariant Violation: WebView has been removed from React Native. It can ....
    react-native 页面使用WebView布满整个页面,导航栏不显示问题
    两个函数执行顺序,异步问题处理(已解决)
    react-native webView乱码问题
    react-native 多页面之间传值
    时间戳转换为时间日期格式
    React Native返回刷新页面(this.props.navigation.goBack())
  • 原文地址:https://www.cnblogs.com/lliuhh/p/7510401.html
Copyright © 2011-2022 走看看