原理:无论是原生XMLHttpRequest请求还是ajax请求 upload对象下都有一个progress函数 会实时返回当前已上传的文件大小 axios 对应的是onUploadProgress这个函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传进度条</title>
</head>
<style>
#bar-warp{
width:500px;
height:30px;
border:1px solid green;
}
#bar{
width:0px;
height:30px;
background:green;
}
</style>
<body>
<input type="file" id="myFile" onchange="upfile();"/>
<div id="bar-warp"><div id="bar"></div></div>
<span id="precent"></span><br/>
</body>
<script>
function upfile() {
var formData = new FormData();
var fileInput = document.getElementById("myFile");
var file = fileInput.files[0];
var xhr = new XMLHttpRequest();
xhr.open('post', '上传地址', true);
xhr.upload.onprogress = function (ev) {
//如果ev.lengthComputable为true就可以开始计算上传进度
//上传进度 = 100* ev.loaded/ev.total
if (ev.lengthComputable) {
console.log(ev.loaded,ev.total)
var precent = 100 * ev.loaded / ev.total;
//更改进度条,及百分比
document.getElementById('bar').style.width = precent + '%';
document.getElementById('precent').innerHTML = Math.floor(precent) + '%';
}
};
formData.append("file", file);
xhr.send(formData);
xhr.onreadystatechange = function () {
//readystate为4表示请求已完成并就绪
if (this.status === 200) {
//在进度条下方插入百分比
console.log('上传完成')
}
};
}
</script>
</html>