首页 > 其他分享 >el-upload二次封装实现上传图片校验

el-upload二次封装实现上传图片校验

时间:2024-04-22 10:13:03浏览次数:24  
标签:el return temp img upload 校验 file 上传

说明

项目开发中,常常需要对上传图片做大小、类型、宽高校验

实现要点

  • el-upload中定义:before-upload="handleBeforeUpload"事件
  • img.onload为异步事件,需要Promise包裹才能真正实现校验,直接return true|false是没用的

代码

<el-upload :before-update="handleBeforeUpdate" :http-request="uploadFile">
  // 自定义上传组件样式
</el-upload>

// 上传前的文件校验
function handleBeforeUpload(file: UploadRawFile) {
  const inType = /.(jpg|jpeg|png|JPG|PNG|JPEG)$/gi.test(file.name);
  if (!inType) {
    ElMessage.warning("上传图片格式应为:PNG、JPG、JPEG");
    return false;
  }
  const inLimit = file.size / 1024 / 1024 < 10;
  if (!inLimit) {
    ElMessage.warning("上传图片不能大于10MB");
    return false;
  }
  const inSize = new Promise<void>(function (resolve, reject) {
    // 因为onload是异步事件,所以需要封装在promise中
    var img_src = URL.createObjectURL(file);
    var img_temp = new Image();
    img_temp.src = img_src;
    img_temp.onload = function () {
      img_temp.width === img_temp.height ? resolve() : reject();
    };
  }).then(
    () => {
      return file;
    },
    () => {
      ElMessage.warning("上传图片宽高比应为1:1");
      return Promise.reject();
    }
  );
  return inType && inLimit && inSize;
}

// 自定义上传事件
async function uploadFile(options: UploadRequestOptions): Promise<any> {
  const { data: fileInfo } = await uploadFileApi(options.file); //自定义接口上传
}

 

标签:el,return,temp,img,upload,校验,file,上传
From: https://www.cnblogs.com/nicoz/p/18150071

相关文章

  • 上架即封神!3.6k Star 的开源游戏模拟器,Delta 冲上 App Store 免费榜
    一直以来,苹果设备的应用商店(AppStore)都是禁止游戏模拟器上架,所以iPhone/iPad用户不能直接安装GBA、红白机之类的模拟器应用,这也让想在iPhone上重温童年游戏机的机友们,十分羡慕Android用户。现在,iPhone/iPad用户终于可以光明正大地在国服「AppStore」下载游戏机模拟器......
  • 新手学习记录丨Excel VBA(1)
    准备工作:开启ExcelVBA工作环境在MicrosoftExcel中,按键Alt+F11(或者Alt+Fn+F11)即可打开VBA编辑器。如下图所示,右键插入“模块”,即可开始在右侧的编辑器中编辑代码。实现最基本的任务:打印Helloworld在ExcelVBA中,字符串用双引号包围。我们可以使用MsgBox函数输出文......
  • LLM开源小工具(基于代码库快速学习/纯shell调用LLM灵活管理系统)
    随着AI的各种信息的发展,LLM各种模型不断涌现,作为一名IT人员不得不向前走,不断探索学习发现新知识。随着学习,也了解到一些对于模型的调用,从而解决一些问题,或者对已有工具或应用的重写。如下是两个小工具介绍:QA-Pilot 是一个基于github开放的代码库进行对话式学习使用的工具(目前......
  • WPF relativesource,self,FindAncestor,AncestorType,AncestorLevel,PreviousData,Tem
    <Windowx:Class="WpfApp68.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com......
  • 21如何通过excel表制作燃尽图
    一,新建一个excel表, 二、选中整个表格,插入—数据透视图,然后默认确定,出现右侧字段  三、在本例中,右侧字段长按天数拖入下方的“轴”中作为横坐标,剩余的两项托入同水平的“值”中作为纵坐标 四、生成柱状图,点击插入—折线图,任选 五、燃尽图完成 ......
  • Kernel panic - not syncing: Out of memory: system-wide panic_on_oom is enabled
    内存不足,导致Java 进程被杀掉。 [1534.300650]Kernelpanic-notsyncing:Outofmemory:system-widepanic_on_oomisenabled[1534.301803]CPU:5PID:2930Comm:javaKdump:loadedTainted:GO5.10.0-60.18.0.50.r1083_58.hce2.x86_64#1[153......
  • elk日志分析系统
    Kubernetes部署安全认证ELK集群一.概述ELK是三个开源软件的缩写,分别表示:Elasticsearch,Logstash,Kibana,它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具......
  • vue v-model 双向绑定
    回顾从vue2到vue3v-model双向绑定的写法变化场景v-model双向绑定,用于处理表单输入绑定,类似于react中的受控组件。//React受控组件functionApp(){const[text,setText]=useState("");return(<><h3>{text}</h3><inputvalue=......
  • shell脚本正则表达式
    声明:以下内容为个人笔记,内容不完全正确,请谨慎参考。正则表达式含义:正则表达式使用的每个单独字符串来描述、匹配一些列符合语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在Linux中,grep,sed,awk等文本处理工具都支持正则表达式......
  • electron-store会将数据保存为什么格式
    electron-store是一个用于Electron应用程序的轻量级、持久化数据存储库。它将数据以JSON格式保存到本地文件系统上。具体来说:数据结构:electron-store接受任何可序列化的JavaScript数据结构作为存储内容。这包括基本类型(如字符串、数字、布尔值)、数组、对象(包括嵌套对象......