js上传文件进度条

本文档展示了如何在Vue项目中利用ElementUI的进度条组件实现文件上传进度显示。通过监听XMLHttpRequest的onprogress事件,动态更新进度条的百分比,并在上传完成后隐藏进度条。此外,还提供了CSS样式和HTML结构,确保进度条在页面中的正确显示。

项目用的是渐进式vue,用了elementUI的进度条组件。
在网上找了很多参考资料,大家写的好像都差不多。

js部分
data: {
	percentage: 0, // 文件上传进度条
	ifProgress: false, // 进度条是否显示
	progressText: '正在上传中,请稍后...', //进度条上方展示文字
},
// 上传文件-列表中的文件上传
fileUploadFun: function(event, index) {
	if(event.target.files == undefined) {
		that.$message({message: '您所使用的浏览器版本过低不支持此功能,请升级浏览器!', type: 'error'})
		return
	}
	var that = this, file = event.target.files[0];
	if(event.target.files.length > 1) {
		that.$message({message: '只允许同时上传一个文件!', type: 'error'})
		return
	}
	// that.loading = true;
	var formData = new FormData();
	formData.append('file', file)
	that.ifProgress = true; //进度条显示
	var xhr=new XMLHttpRequest();
	xhr.open('POST', '/uploadFile', true);
	xhr.onreadystatechange=function (){
		//readystate为4表示请求已完成并就绪
		if(this.readyState==4){}
	}
	xhr.upload.onprogress = function(ev) {
		//如果ev.lengthComputable为true就可以开始计算上传进度
		//上传进度 = 100* ev.loaded/ev.total
		if(ev.lengthComputable){
			var precent=100 * ev.loaded/ev.total;
			// console.log(precent);
			//更改进度条,及百分比
			that.percentage = parseInt(precent);
		}
	}
	xhr.send(formData);
	xhr.onload = function(res) {
		that.ifProgress = false;
		var response = JSON.parse(res.currentTarget.response);
		// console.log(response);
		if(response.statusCode == 200) {
			that.progressText = response.message;
			that.$message({message: response.message", type: 'success'})
			// 文件上传的其他操作
		}else {
			that.progressText = response.message;
			that.$message({message:response.message, type: 'error'})
		}
	} //请求完成
	xhr.onerror = function(res) {
		that.ifProgress = false;
		that.$message({message:"网络错误,请刷新网页", type: 'error'})
	} // 请求失败
},
HTML&CSS部分
<style>
/* 进度条相关 */
.progressBox{position: fixed;top: 0;left: 0;width: 100%;height: 100%;background: rgba(255,255,255,0.8);z-index: 11;}
.progressText{text-align: center;color: #333333;font-size: 16px;position: absolute; top: 45%;margin-top: -40px;width: 100%;}
.el-progress{width: 40%;top: 45%;margin-top: -13px;left: 30%;}
</style>
<div class="progressBox" v-show="ifProgress">
	<div class="progressText">{{progressText}}</div>
	<el-progress :text-inside="true" :stroke-width="26" :percentage="percentage"></el-progress>
</div>

2021年1月20日,待封装优化。在这里提前给各位拜个早年嘞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值