当前位置: 代码网 > it编程>前端脚本>Ajax > AJAX上传下载进度监控完全攻略(适合新手)

AJAX上传下载进度监控完全攻略(适合新手)

2026年10月09日 • Ajax •我要评论
ajax 上传/下载进度监控实现方法xmlhttprequest 进度监控xmlhttprequest 对象的 progress 事件可用于监控上传和下载进度。需要区分 upload 和 downlo

ajax 上传/下载进度监控实现方法

xmlhttprequest 进度监控

xmlhttprequest 对象的 progress 事件可用于监控上传和下载进度。需要区分 upload 和 download 事件:

const xhr = new xmlhttprequest();
xhr.open('post', '/upload');

// 上传进度监控
xhr.upload.onprogress = function(e) {
  if (e.lengthcomputable) {
    const percent = (e.loaded / e.total) * 100;
    console.log(`上传进度: ${percent}%`);
  }
};

// 下载进度监控
xhr.onprogress = function(e) {
  if (e.lengthcomputable) {
    const percent = (e.loaded / e.total) * 100;
    console.log(`下载进度: ${percent}%`);
  }
};

xhr.send(formdata);

fetch api 进度监控

fetch api 通过读取 readablestream 实现进度监控:

fetch('/download')
  .then(response => {
    const reader = response.body.getreader();
    const contentlength = +response.headers.get('content-length');
    let receivedlength = 0;

    return new promise((resolve, reject) => {
      function processchunk({ done, value }) {
        if (done) {
          resolve();
          return;
        }
        receivedlength += value.length;
        console.log(`下载进度: ${(receivedlength/contentlength)*100}%`);
        return reader.read().then(processchunk);
      }
      reader.read().then(processchunk);
    });
  });

axios 进度监控

axios 提供了更简洁的进度监控接口:

axios.post('/upload', formdata, {
  onuploadprogress: progressevent => {
    const percent = math.round(
      (progressevent.loaded * 100) / progressevent.total
    );
    console.log(`上传进度: ${percent}%`);
  },
  ondownloadprogress: progressevent => {
    const percent = math.round(
      (progressevent.loaded * 100) / progressevent.total
    );
    console.log(`下载进度: ${percent}%`);
  }
});

进度条ui实现

结合前端框架实现可视化进度条:

<div class="progress-bar">
  <div class="progress" style="width: 0%"></div>
</div>

<script>
function updateprogressbar(percent) {
  document.queryselector('.progress').style.width = `${percent}%`;
}
</script>

断点续传实现

通过记录已传输的字节数实现断点续传:

// 上传时添加range头
headers: {
  'range': `bytes=${resumebyte}-`
}

// 服务器响应206 partial content

错误处理

必须添加错误处理逻辑保证健壮性:

xhr.onerror = function() {
  console.error('传输失败');
};

fetch().catch(error => {
  console.error('请求失败:', error);
});

注意事项

  • 确保服务器正确返回 content-length 头信息
  • 跨域请求需要服务器配置 access-control-expose-headers
  • 大文件传输建议分块处理
  • 进度信息可能需要节流(throttle)避免频繁ui更新

总结

到此这篇关于ajax上传下载进度监控完全攻略的文章就介绍到这了,更多相关ajax上传下载进度监控内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

赞 (0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com