Antd react上传图片格式限制

server/2024/12/21 21:20:02/

 限制分辨率(像素)

<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/server/152050.html

相关文章

博世智驾新动力:Apache DolphinScheduler如何征服数据处理挑战

视频及PPT等相关资料&#xff1a;点击查看 讲师介绍 陶超权&#xff0c;博世智驾&#xff08;中国&#xff09;后端工程师&#xff0c;负责数据处理和数据调度方面工作&#xff0c;在智能驾驶数据处理领域具有丰富的实践经验。在2024年12月Apache DolphinScheduler社区线上交流…

【专题】2024抖音电商母婴行业分析报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p38651 在数字化浪潮的席卷下&#xff0c;抖音电商母婴行业正经历着深刻变革。当下&#xff0c;年轻一代父母崛起&#xff0c;特别是 24 至 30 岁以及 18 至 23 岁的群体成为抖音母婴行业兴趣人群的主力军。他们带来全新育儿理念&…

【优选算法篇】前缀和与哈希表的完美结合:掌握子数组问题的关键(下篇)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

点击展示大图预览

原文链接在table表格里能够实现&#xff0c;点击里面的图片实现大图预览的效果&#xff1b; 一、先安装viewer — 使用npm安装 npm install v-viewer --save二、在main.js中引入 import Viewer from v-viewer //点击图片大图预览 import viewerjs/dist/viewer.css Vue.use(…

mybatis分页插件的使用

1. 引入依赖包 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>6.1.0</version> </dependency> 2 添加分页插件配置 2.1 使用配置类的方式&#xff08;推荐&#xff09…

GIT命令使用手册(详细实用版)

一、git常用操作参考 第一次提交完整步骤&#xff1a; 1.git init; 2.git add . 3.git commit -m "初始化" 4.git remote add origin https://github.com/githubusername/demo.git 5.git pull origin master 6.git push -u origin master&#xff08;使用-u选项可以将…

ES6学习let和const(二)

一、let let的用法类似于var&#xff0c;但是也是不同之处。 1.1、作用域 let声明的变量具有块级作用域&#xff0c;仅在声明它的代码块内有效。 var声明的变量拥有函数作用域&#xff0c;如果在函数外部声明&#xff0c;他将具有全局作用域。在全局作用域下使用var声明的变…

UE5 做简单的风景观光视频

A、思路 新建摄像机&#xff0c;关卡序列&#xff0c; 镜头试拍录制器&#xff0c;新建镜头轨道&#xff0c;拖入摄像机&#xff0c; 变换&#xff0c;设置多个关键帧&#xff0c;改变摄像机在场景中的位置&#xff0c; 完成后&#xff0c;导出即可。 B、参考图