43人参与 • 2026-10-09 • Ajax
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 通过读取 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.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}%`);
}
});
结合前端框架实现可视化进度条:
<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到此这篇关于ajax上传下载进度监控完全攻略的文章就介绍到这了,更多相关ajax上传下载进度监控内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论