[element-plus] el-upload 上传一张图,有缩略图,可删除

在这里插入图片描述
在这里插入图片描述

传单张,可删除,传上去有缩略图

<el-upload
  class="avatar-uploader"
  action="#"
  :limit="1"
  :show-file-list="false"
  ref="uploadInstance"
  :before-upload="beforeUpload"
  accept="image/png,image/jpg,image/jpeg"
  :on-change="onChange"
>
  <img v-if="formData.appLogo" :src="formData.appLogo" class="avatar" />
  <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
  <span
    v-if="formData.appLogo"
    class="logoDelete"
    @click.stop="clearUploadImg"
    >删除</el-icon>
</el-upload>

把 action设置空,因为它是必传的,auto-upload 自动上传设置为 false

删除
// 删除
const clearUploadImg = (file) => {
  formData.value.appLogo = "";
  uploadBanner.value.clearFiles();  // 清空已上传的文件列表
};
图片转base64
onChange(file) {
  //把图片转成base64编码
  const reader = new FileReader()
  reader.readAsDataURL(file.raw)
  reader.onload = (e) => {
    let base64Code = e.target.result
    console.log(base64Code )//base64数据
    let code = base64Code.replace(/.*;base64,/, '') // 去掉data:image/jpeg;base64,
    // beforeUpdateImg.value.push({ uid: file.uid,photo: reader.result})
  }
},
限制大小,格式,分辨率
// 图片上传尺寸大小检验
beforeUpload (file) {
  let _this = this
  const types =["image/jpeg" ,"image/png","image/jpg"]
  const isTypes =type.includes(file.type);
  
  const is1M = file.size / 1024 / 1024 < 1; // 限制小于1M
  // const is40K = file.size / 1024 < 40; // 限制小于40K
  
  const isSize = new Promise(function (resolve, reject) {
    let width = 654; // 限制图片尺寸为654X270
    let height = 270;
    let _URL = window.URL || window.webkitURL;
    let img = new Image();
    img.onload = function () {
      let valid = img.width === width && img.height === height;
      valid ? resolve() : reject();
    }
    img.src = _URL.createObjectURL(file);
  }).then(() => {
    return file;
  }, () => {
    ElMessage.error('图片尺寸限制为654 x 270,大小不可超过1MB')
    return Promise.reject();
  });
  if (!is1M) {
    ElMessage.error('图片大小不可超过1MB')
  }
  if (!isTypes ) {
    ElMessage.error('只能上传jpeg/jpg/png图片')
  }
  return isSize&is1M && isTypes 
}
手动触发选择文件
import { UploadInstance } from 'element-plus'
import { ref, type Ref } from "vue"

const uploadInstance: Ref<UploadInstance> = ref(null)


// 手动选择文件
const select = () => {
  uploadInstance.value.$el.querySelector('input').click()
}

参考:

vue3使用ElementPlus upload上传文件的两种方式

el-upload上传组件获取文件,file转为base64

element-plus 中 el-upload 通过其他位置的点击触发选择文件功能

Vue el-upload 选择图片转Base64 后上传给接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值