Antd react上传图片格式限制的实现代码
更新时间:2024年12月21日 12:07:16 作者:向画
这篇文章主要介绍了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; }
到此这篇关于Antd react上传图片格式限制的文章就介绍到这了,更多相关Antd react上传图片格式限制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
react-native中ListView组件点击跳转的方法示例
ListView作为React Native的核心组件,用于高效地显示一个可以垂直滚动的变化的数据列表。下面这篇文章主要给大家介绍了关于react-native中ListView组件点击跳转的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。2017-09-09
最新评论