vue element-plus上传文件前读取上传的文件

      <el-form-item label="头像">
        <div>
          <el-image class="avatar" :src="form.headImg" :preview-src-list="[form.headImg]"></el-image>
        </div>
        <el-upload ref="upload" :action="UploadHttp" class="avatar-uploader" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
          <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
        </el-upload>
      </el-form-item>
import type { UploadProps } from 'element-plus'
const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
  const fileSize = rawFile.size;
  if (fileSize / 1024 / 1024 > 2) {
    ElMessage.error('头像图片大小不能超过 2MB!');
    return false
  }
  return new Promise((resolve, reject) => { // 返回一个 Promise  
    const reader = new FileReader();  
    reader.readAsArrayBuffer(rawFile);  
    reader.onload = async (e) => {  
      try {  
        const content = new Uint8Array(e.target.result);  
        const hash = CryptoJS.SHA256(CryptoJS.lib.WordArray.create(content)).toString();  
        const { data } = await axios.get(`${api.http}/api/Uploader/FileExists?fileSize=${fileSize}&sha256Hash=${hash}`);  
        if (data.data.isExists) {
          // 如果文件已存在,则不继续上传
          if(form.headImg !== data.data.url){
            form.headImg = data.data.url;
          }
          resolve(false); // 解析 Promise 为 false  
        } else {  
          // 如果文件不存在,则继续上传  
          resolve(true); // 解析 Promise 为 true  
        }  
      } catch (error) {  
        // 如果发生错误,则拒绝 Promise  
        reject(false);  
      }  
    };  
    reader.onerror = (error) => {  
      // 如果读取文件时发生错误,则拒绝 Promise  
      reject(false);  
    };  
  }); 
}

const handleAvatarSuccess: UploadProps['onSuccess'] = (
  response,
  uploadFile
) => {
  console.log(uploadFile);
  form.headImg = URL.createObjectURL(uploadFile.raw!)
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值