element-ui的el-upload自定义上传头像,并显示进度条

element默认的上传头像,并没有进度条的展示,当图片较大或网速较慢时,就会显得卡顿,用户体验很不好。所以就重写了el-upload的上传头像部分,并自定义了上传行为。
效果预览:
在这里插入图片描述
根据官方文档,要覆盖默认的行为,要绑定http-request,自定义一个方法来实现。这里使用了el-progress来展示进度条,通过axios的onUploadProgress方法来获取实时的进度。
代码实现:
1、template:

<section>
                <img v-if="!progressFlag" class="head-img" :src="imageUrl" />
                <div v-show="progressFlag" class="head-img">
                    <el-progress type="circle" :percentage="progressPercent"></el-progress>
                </div>
                <el-upload class="img-btn" action="#"
    :show-file-list="false"  :before-upload="beforeAvatarUpload"
    :http-request="uploadImg">
    <el-button type="success" plain round size="mini">更改头像</el-button></el-upload>
            </section>

script:

uploadImg (f) {
            console.log(f)
            this.progressFlag = true
            let formdata = new FormData()
            formdata.append('image', f.file)
            axios({
            url: baseURL + '/image',
            method: 'post',
            data: formdata,
            headers: {'Content-Type': 'multipart/form-data'},
            onUploadProgress: progressEvent => {
                // progressEvent.loaded:已上传文件大小
                // progressEvent.total:被上传文件的总大小
                this.progressPercent = (progressEvent.loaded / progressEvent.total * 100)
            }
        }).then(res => {
            this.imageUrl = res.data.data
            if (this.progressPercent === 100) {
                this.progressFlag = false
                this.progressPercent = 0
            }
        }).then(error => {
            console.log(error)
        })
        },
        // 上传图片前的过滤
        beforeAvatarUpload (file) {
            const isJPG = file.type === 'image/jpeg'
            const isLt2M = (file.size / 1024 / 1024) < 2

            if (!isJPG) {
                this.$message.error('上传头像图片只能是 JPG 格式!')
            }
            if (!isLt2M) {
                this.$message.error('上传头像图片大小不能超过 2MB!')
            }
            return isJPG && isLt2M
        },
  • 17
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值