Antd react上传图片格式限制

 限制分辨率(像素)

<a-upload
:before-upload="beforeUpload"
  >
  // 上传图片宽高比例限制
  const beforeUpload = file => {
    return new Promise((resolve, reject) => {
      // // 图片类型限制
      // let isJpgOrPng = file.type === 'image/png' || file.type === 'image/jpg';
      // if (!isJpgOrPng) {
      //   message.error('格式错误,只能上传jpg、jpeg、png');
      //   return reject(false);
      // }
 
      // 图片宽高比例限制
      let w = 0,
        h = 0;
      let reader = new FileReader();
      reader.readAsDataURL(file);
      reader.onload = () => {
        const image = new Image();
        image.src = reader.result;
        image.onload = () => {
          w = image.width;
          h = image.height;
          const ratio = 670 / 320;
          if (w / h == ratio) {
            // 图片比例为670*320横纵比一致
            return resolve(true);
          } else {
            message.error('图片尺寸错误,只能上传670x320横纵比一致的图片');
            return reject(false);
          }
        };
      };
      // 图片大小限制
      let isLt1M = file.size / 10240 / 10240 <= 1;
      if (!isLt1M) {
        message.error('图片大小超过10MB!');
        return reject(false);
      }
      // return isJpgOrPng && isLt1M; // 限制宽高比例、大小及类型
      return isLt1M; // 只限制宽高和大小
    });
  };

 new FileReader();   new Image();

获取图片上传的像素宽高

 

AI解释

`new FileReader();` 是 JavaScript 中用于读取文件的一个构造函数。它创建了一个 `FileReader` 对象,能够异步读取本地文件的数据(如文本、图像等),将其以不同格式返回。

### 主要用途:
1. **异步读取文件**:可以从用户选择的文件中读取数据,而不会阻塞主线程。文件读取操作是异步的,即使文件很大,用户仍然可以继续与页面交互。
  
2. **支持多种格式**:`FileReader` 可以以多种格式读取文件,例如:
   - `readAsText(file)`:读取文件为文本。
   - `readAsDataURL(file)`:读取文件为 Data URL(如图像文件),可用于图像展示。
   - `readAsArrayBuffer(file)`:读取文件为 ArrayBuffer,用于处理二进制数据。

### 在代码中的使用:
在你的代码中,`new FileReader()` 被用来创建一个新的 `FileReader` 对象,以便读取用户上传的文件。接下来,你设置了 `onload` 事件处理程序,在文件读取完成后执行相关操作(例如创建一个 `Image` 对象来检查图像的尺寸)。

以下是一个简化的流程说明:
1. 用户选择文件(例如图像)。
2. 创建 `FileReader` 实例。
3. 使用 `reader.readAsDataURL(file)` 方法开始读取文件,该方法异步读取内容,并在完成后触发 `onload` 事件。
4. 在 `onload` 事件处理程序中,使用读取的结果(图像数据)进行尺寸检查。

其他限制,大小,数量

  const beforeUpload = (file, type,width, height) => {
    console.log('file=======',file)
    const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
    if (!isJpgOrPng) {
      message.error('请上传正确的图片格式');
    }
    const isLt2M = file.size / 1024 / 1024 < 2;
    const isLt300 = file.size / 1024 < 300;
    const isLt50 = file.size / 1024 < 50;
    if(type===1){
      // 限制图片像素宽高
      const width = 4836;
      const height = 3844;
      return new Promise((resolve, reject) => {
          let reader = new FileReader();
          console.log("reader===",reader)
          reader.addEventListener(
              'load',
              () => {
                  let img = new Image();
                  img.src = reader.result; 
                  img.onload = () => {
                      if (img.width < width || img.height < height) {
                          message.error('请上传宽高大于等于 4836*3844 的封面图!');
                          reject(new Error('请上传宽高大于等于 4836*3844 的封面图!'));
                          return;
                
                      } else {
                          resolve();
                      }
                  };
              },
          );
          reader.readAsDataURL(file);
      }).catch(() => {
        return false;
      })

    }
    if (type === 1 && !isLt2M) {



      message.error('图片大小不能超过2MB');
      return false
    }
    if ((type === 2 || type === 3 || type === 5) && !isLt300) {
      message.error('图片大小不能超过300KB');
      return false
    }
    if (type === 4 && !isLt50) {
      message.error('图片大小不能超过50KB');
      return false
    }

    const img = type === 1 && coverImage.length
    if (img) {
      message.error('只能上传一张图片');
    }
    const bg = type === 2 && backGroundImage.length
    if (bg) {
      message.error('只能上传一张图片');
    }
    const tt = type === 3 && topicImage.length
    if (tt) {
      message.error('只能上传一张图片');
    }
    const pi = type === 4 && prizeImage.length
    if (pi) {
      message.error('只能上传一张图片');
    }
    const sh = type === 5 && shareImage.length
    if (sh) {
      message.error('只能上传一张图片');
    }
    return isJpgOrPng && !img && !bg && !tt && !pi && !sh;
  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/942054.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Confluent Cloud Kafka 可观测性最佳实践

Confluent Cloud 介绍 Confluent Cloud 是一个完全托管的 Apache Kafka 服务&#xff0c;提供高可用性和可扩展性&#xff0c;旨在简化数据流处理和实时数据集成。用户可以轻松创建和管理 Kafka 集群&#xff0c;而无需担心基础设施的维护和管理。Confluent Cloud 支持多种数据…

StartAI图生图局部重绘,让画面细节焕发新生!!

在设计的世界里&#xff0c;每一个细节都承载着我们的创意与心血。然而&#xff0c;有时我们总会遇到一些不尽如人意的画面细节&#xff0c;它们如同瑕疵般破坏了整体的和谐与美感。今天&#xff0c;我要向大家推荐一款强大的工具——StartAI的局部重绘功能&#xff0c;它正是我…

易语言 OCR 文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

重温设计模式--单例模式

文章目录 单例模式&#xff08;Singleton Pattern&#xff09;概述单例模式的实现方式及代码示例1. 饿汉式单例&#xff08;在程序启动时就创建实例&#xff09;2. 懒汉式单例&#xff08;在第一次使用时才创建实例&#xff09; 单例模式的注意事项应用场景 C代码懒汉模式-经典…

ArKTS基础组件3

一.PatternLock 图案密码锁组件&#xff0c;以九宫格图案的方式输入密码&#xff0c;用于密码验证场景 属性: sideLength:设置组件的宽度和高度&#xff08;宽高相同&#xff09;。设置为0或负数时组件不显示。 参数名类型必填说明valueLength是组件的宽度和高度。默认值&a…

python2:数据、运算符与表达式

一&#xff0c;数据类型&#xff1a; 数据类型是计算机对现实中数据的抽象&#xff0c;不同的数据类型其存储格式、数据范围、 计算要求都各不相同。 Python中的数据类型可以分为以下三类 基础类型&#xff1a;字符串(str)、整数(int)、实数(float)、布尔(bool)、复数(compl…

tortoisegit推送失败

tortoisegit推送失败 git.exe push --progress -- "origin" testLidar:testLidar /usr/bin/bash: gitgithub.com: No such file or directory fatal: Could not read from remote repository. Please make sure you have the correct access rights and the reposit…

pyinstaller打包资源文件和ini配置文件怎么放

1.如果出现无法成功完成操作&#xff0c;因为文件包含病毒或潜在的垃圾软件&#xff0c;说明你的版本太高&#xff0c;更换pyinstaller版本。 pip install pyinstaller6.2.02.一开始打包的时windows下尽量选择打成文件夹的并且要是带命令行窗口的&#xff0c;容易查看错误。 …

autMan奥特曼机器人-autMan的PHP环境

直装版请自行安装php环境。 docker版本预置了php环境&#xff0c;如下图&#xff1a; 如果使用插件"test php"测试环境时&#xff0c;实时日志有报错如下&#xff1a; 可进入终端&#xff0c;输入两条命令 apk add curl apk add php-curl

uniApp打包H5发布到服务器(docker)

使用docker部署uniApp打包后的H5项目记录&#xff0c;好像和VUE项目打包没什么区别... 用HX打开项目&#xff0c;首先调整manifest.json文件 开始用HX打包 填服务器域名和端口号~ 打包完成后可以看到控制台信息 我们可以在web文件夹下拿到下面打包好的静态文件 用FinalShell或…

【Leetcode】1705. 吃苹果的最大数目

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 有一棵特殊的苹果树&#xff0c;一连 n n n 天&#xff0c;每天都可以长出若干个苹果。在第 i i i 天&#xff0c;树上会长出 a p p l e s [ i ] apples[i] apples[i] 个苹果&a…

4、数据结构与算法解析(C语言版)--栈

栈的数据存储遵循“后进先出的规则”&#xff0c;这在计算机里面是非常有用的&#xff0c;比如word等编辑软件的"撤销"功能&#xff0c;就是使用栈进行实现的。 1、创建项目 main.h #ifndef _MAIN_H #define _MAIN_H#include <stdio.h> #include <stdlib.…

施耐德变频器ATV320系列技术优势:创新与安全并重

在工业自动化领域&#xff0c;追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证&#xff0c;成为能够帮助企业降低安装成本&#xff0c;提高设备性能的创新解决方案。 【全球认证&#xff0c;品质保障】ATV320 系列秉持施耐德…

【软考高级】系统架构设计师复习笔记-精华版

文章目录 前言0 系统架构设计师0.1 考架构还是考系分0.2 架构核心知识0.3 架构教材变化 1 计算机操作系统1.1 cpu 组成1.2 内核的五大功能1.3 流水线技术1.4 段页式存储1.5 I/O 软件1.6 文件管理1.7 系统工程相关 2 嵌入式2.1 嵌入式技术2.2 板级支持包&#xff08;BSP&#xf…

并发编程(19)——引用计数型无锁栈

文章目录 十九、day191. 引用计数2. 代码实现2.1 单引用计数器无锁栈2.2 双引用计数器无锁栈 3. 本节的一些理解 十九、day19 上一节我们学习通过侯删链表以及风险指针与侯删链表的组合两种方式实现了并发无锁栈&#xff0c;但是这两种方式有以下缺点&#xff1a; 第一种方式…

大恒相机开发(2)—Python软触发调用采集图像

大恒相机开发&#xff08;2&#xff09;—Python软触发调用采集图像 完整代码详细解读和功能说明扩展学习 这段代码是一个Python程序&#xff0c;用于从大恒相机采集图像&#xff0c;通过软件触发来采集图像。 完整代码 咱们直接上python的完整代码&#xff1a; # version:…

步进电机直线插补

基础原理 代码部分

数据结构经典算法总复习(上卷)

第一章&#xff1a;数据结构导论 无重要考点&#xff0c;仅需了解时间复杂度。 第二章&#xff1a;线性表 1.获得线性表第i个元素 void GetElem_sq(SqList L, int i, ElemType &e) {if (i<1 || i>L.length) ErrorMsg("Invalid i value"); //注意错误监…

Windows11 安装 Ubuntu-20.04,同时安装配置 zsh shell,配置 git 别名(alias),大大提高开发效率

背景&#xff1a;家里配置了一台 Windows 电脑&#xff0c;有时候需要用到 vscode 开发测试一些代码&#xff0c;在使用过程中发现原生 windows 敲代码不是很友好&#xff0c;于是想到配置 wsl&#xff0c;安装 Ubuntu&#xff0c;并安装配置 zsh shell&#xff0c;同时配置 gi…

PE文件结构

PE文件是Windows系统下可执行文件的总称&#xff0c;英文全称 Portable Executable 可移植的可执行文件&#xff0c;常见的有exe、dll、sys、com、ocx 对于学习反&#xff08;木马、免杀、病毒、外挂、内核&#xff09;&#xff0c;了解PE文件结构是非常有必要且非常非常重要的…