Antd react上传图片格式限制

devtools/2024/12/29 8:02:27/

 限制分辨率(像素)

<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.lengthif (img) {message.error('只能上传一张图片');}const bg = type === 2 && backGroundImage.lengthif (bg) {message.error('只能上传一张图片');}const tt = type === 3 && topicImage.lengthif (tt) {message.error('只能上传一张图片');}const pi = type === 4 && prizeImage.lengthif (pi) {message.error('只能上传一张图片');}const sh = type === 5 && shareImage.lengthif (sh) {message.error('只能上传一张图片');}return isJpgOrPng && !img && !bg && !tt && !pi && !sh;}


http://www.ppmy.cn/devtools/144021.html

相关文章

爬虫抓取的数据如何有效存储和管理?

在现代数据驱动的世界中&#xff0c;爬虫技术已成为获取网络数据的重要手段。然而&#xff0c;如何有效地存储和管理这些数据是一个关键问题。本文将详细介绍几种有效的数据存储和管理方法&#xff0c;并提供相应的Java代码示例。 1. 数据存储方式 1.1 文件存储 文件存储是最…

Electron-Vue 开发下 dev/prod/webpack server各种路径设置汇总

背景 在实际开发中&#xff0c;我发现团队对于这几个路径的设置上是纯靠猜的&#xff0c;通过一点点地尝试来找到可行的路径&#xff0c;这是不应该的&#xff0c;我们应该很清晰地了解这几个概念&#xff0c;以下通过截图和代码进行细节讲解。 npm run dev 下的路径如何处理&…

[HNCTF 2022 Week1]你想学密码吗?

下载附件用记事本打开 把这些代码放在pytho中 # encode utf-8 # python3 # pycryptodemo 3.12.0import Crypto.PublicKey as pk from hashlib import md5 from functools import reducea sum([len(str(i)) for i in pk.__dict__]) funcs list(pk.__dict__.keys()) b reduc…

2024年12月20日Github流行趋势

项目名称&#xff1a;EbookFoundation / free-programming-books 项目维护者&#xff1a;vhf, eshellman, davorpa, MHM5000, kadhirash 等项目介绍&#xff1a;免费的编程书籍集合项目star数&#xff1a;342,145项目fork数&#xff1a;62,055 项目名称&#xff1a;microsoft …

SpringMVC 学习笔记

在 Web 开发的世界里&#xff0c;SpringMVC 是一个极为重要的框架&#xff0c;它能够帮助我们构建高效、灵活的 Web 应用程序。 一、MVC 设计理念 MVC&#xff0c;即 Model - View - Controller&#xff0c;是一种将软件系统划分为三个主要部分的设计模式。它的出现旨在实现各…

XSLT 编辑 XML

XSLT 编辑 XML 介绍 XSLT&#xff08;可扩展样式表语言转换&#xff09;是一种用于转换XML文档的语言。它允许开发人员将XML数据转换为其他格式&#xff0c;如HTML、PDF或纯文本。XSLT通过使用XPath查询来定位XML文档中的元素&#xff0c;并对这些元素应用转换规则。在本教程…

Java转C++之编程范式

1. 过程式编程&#xff08;Procedural Programming&#xff09; 在 C 中的表现 过程式编程是通过一系列的函数调用来实现程序的功能。函数是核心构建单元&#xff0c;数据和操作通过函数进行交互。 C 中&#xff1a;可以使用普通的函数和全局变量来进行过程式编程。Java 中&…

常见异构程序设计语言

目录 一、OpenMP 二、MPI 三、CUDA/HIP 四、OpenACC 五、Athread 六、OpenCL 七、oneAPI 20世纪80年代&#xff0c;异构计算技术就已经诞生了。异构就是CPU、DSP、GPU、ASIC、协处理器、FPGA等各种计算单元、使用不同的类型指令集、不同的体系架构的计算单元&#xff0c…