上传头像upload的简易方法,转base64调接口的

1.首页使用el-image显示数据,用的是转base64后端返给的

javascript 复制代码
 <el-table-column prop="avatar" align="center" label="头像">
          <template #default="scope">
            <el-image style="height: 40px;width: 40px;" :src="scope.row.avatar"></el-image>
          </template>
        </el-table-column>

  private url = 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'

2.在添加的页面上的操作

javascript 复制代码
//写好组件
 <el-upload class="upload-demo" ref="upload" action="" :on-remove="handleRemove" :file-list="file_list" :on-change="getFile"
          :auto-upload="false" list-type="picture" :limit="1">
          <el-button size="small" type="primary">上传人物头像</el-button>
        </el-upload>




//存放base64最后放接口里的
 private icon: any = ''

//存放图片的list
  private file_list: any[] = []

// 移除上传的文件时的回调
  private handleRemove() {
    this.icon = ''
    this.$delete(this.file_list, 0)
  }


 // 图片转base64  核心
  private getBase64(file) {
    return new Promise(function (resolve, reject) {
      let reader = new FileReader()
      let imgResult = ''
      reader.readAsDataURL(file)
      reader.onload = function () {
        imgResult = reader.result as any
      }
      reader.onerror = function (error) {
        reject(error)
      }
      reader.onloadend = function () {
        resolve(imgResult)
      }
    })
  }


//  当文件状态改变、添加文件、上传成功和上传失败时调用,控制大小和类型
  private getFile(file, fileList) {
    let fileType = file.name.substring(file.name.lastIndexOf('.') + 1)
    let fileSize = file.size / 1024 / 1024 < 5
    if (fileType !== 'png' && fileType !== 'jpg' && fileType !== 'jpeg') {
      ;(this.$refs.upload as any).clearFiles()
      ElMessage({
        message: '上传文件只能是 .png、.jpg、jpeg格式!',
        type: 'warning'
      })
      return false
    } else if (!fileSize) {
      ;(this.$refs.upload as any).clearFiles()
      ElMessage({
        message: '上传文件大小不能超过 5MB!',
        type: 'warning'
      })
      return false
    } else {
      // this.isImage = true
      this.getBase64(file.raw).then((res) => {
        this.icon = res
      })
    }
  }




//再打开编辑的时候需要的操作
//判断带过来的图片有没有base64数据,有就返回它,在dialog显示,没有就清空,解决空白图片问题
 if (rowData.avatar) {
        this.file_list = [{ url: rowData.avatar }]
      } else {
        this.file_list = []
      }
相关推荐
To_OC7 小时前
写了三遍 Todo List,我终于搞懂了 React 父子组件到底怎么通信
前端·javascript·react.js
勇往直前plus7 小时前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮7 小时前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
用户938515635078 小时前
从零搭建 AI 日记助手:用 Milvus 向量数据库 + RAG 让机器读懂你的每一天
javascript·人工智能·全栈
徐小夕9 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
a11177610 小时前
坦克大战3D Three.js 3D (开源项目)
开发语言·javascript·3d
kyriewen11 小时前
别再乱用useEffect了——你写的10个里有8个不该存在
前端·javascript·react.js
Ivanqhz11 小时前
Rust &‘static str浅析
java·前端·javascript·rust
IT_陈寒11 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱11 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端