最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Antd react上傳圖片格式限制的實(shí)現(xiàn)代碼

 更新時間:2024年12月21日 12:07:16   作者:向畫  
這篇文章主要介紹了Antd react上傳圖片格式限制的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼圖文效果給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

限制分辨率(像素)

<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 中用于讀取文件的一個構(gòu)造函數(shù)。它創(chuàng)建了一個 `FileReader` 對象,能夠異步讀取本地文件的數(shù)據(jù)(如文本、圖像等),將其以不同格式返回。
### 主要用途:
1. **異步讀取文件**:可以從用戶選擇的文件中讀取數(shù)據(jù),而不會阻塞主線程。文件讀取操作是異步的,即使文件很大,用戶仍然可以繼續(xù)與頁面交互。
2. **支持多種格式**:`FileReader` 可以以多種格式讀取文件,例如:
   - `readAsText(file)`:讀取文件為文本。
   - `readAsDataURL(file)`:讀取文件為 Data URL(如圖像文件),可用于圖像展示。
   - `readAsArrayBuffer(file)`:讀取文件為 ArrayBuffer,用于處理二進(jìn)制數(shù)據(jù)。
### 在代碼中的使用:
在你的代碼中,`new FileReader()` 被用來創(chuàng)建一個新的 `FileReader` 對象,以便讀取用戶上傳的文件。接下來,你設(shè)置了 `onload` 事件處理程序,在文件讀取完成后執(zhí)行相關(guān)操作(例如創(chuàng)建一個 `Image` 對象來檢查圖像的尺寸)。
以下是一個簡化的流程說明:
1. 用戶選擇文件(例如圖像)。
2. 創(chuàng)建 `FileReader` 實(shí)例。
3. 使用 `reader.readAsDataURL(file)` 方法開始讀取文件,該方法異步讀取內(nèi)容,并在完成后觸發(fā) `onload` 事件。
4. 在 `onload` 事件處理程序中,使用讀取的結(jié)果(圖像數(shù)據(jù))進(jìn)行尺寸檢查。

其他限制,大小,數(shù)量

  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;
  }

到此這篇關(guān)于Antd react上傳圖片格式限制的文章就介紹到這了,更多相關(guān)Antd react上傳圖片格式限制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React?JSX深入淺出理解

    React?JSX深入淺出理解

    React使用JSX來替代常規(guī)的JavaScript。JSX是一個看起來很像 XML的JavaScript語法擴(kuò)展。我們不需要一定使用 JSX,但它有以下優(yōu)點(diǎn):JSX執(zhí)行更快,因?yàn)樗诰幾g為JavaScript代碼后進(jìn)行了優(yōu)化。它是類型安全的,在編譯過程中就能發(fā)現(xiàn)錯誤。使用JSX編寫模板更加簡單快速
    2022-12-12
  • React+Typescript創(chuàng)建項(xiàng)目的實(shí)現(xiàn)步驟

    React+Typescript創(chuàng)建項(xiàng)目的實(shí)現(xiàn)步驟

    通過React組件庫和TypeScript的強(qiáng)類型特性,開發(fā)者可以創(chuàng)建出具有優(yōu)秀用戶體驗(yàn)和穩(wěn)定性的Web應(yīng)用程序,本文主要介紹了React+Typescript創(chuàng)建項(xiàng)目的實(shí)現(xiàn)步驟,感興趣的可以了解一下
    2023-08-08
  • React JSX基礎(chǔ)語法教程示例

    React JSX基礎(chǔ)語法教程示例

    這篇文章主要為大家介紹了React JSX基礎(chǔ)語法教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • React?Hooks之useState,useEffect及自定義Hook的最佳實(shí)踐

    React?Hooks之useState,useEffect及自定義Hook的最佳實(shí)踐

    React?Hooks自16.8版本引入以來,徹底改變了我們編寫React組件的方式,本文將深入探討三個最重要的Hooks:useState、useEffect,以及如何創(chuàng)建和使用自定義Hooks,感興趣的小伙伴可以了解下
    2025-09-09
  • React 使用recharts實(shí)現(xiàn)散點(diǎn)地圖的示例代碼

    React 使用recharts實(shí)現(xiàn)散點(diǎn)地圖的示例代碼

    這篇文章主要介紹了React 使用recharts實(shí)現(xiàn)散點(diǎn)地圖的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 探討JWT身份校驗(yàn)與React-router無縫集成

    探討JWT身份校驗(yàn)與React-router無縫集成

    這篇文章主要為大家介紹了JWT身份校驗(yàn)與React-router無縫集成的探討解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 一步步設(shè)置你的第一個Next.js項(xiàng)目(非常詳細(xì)!)

    一步步設(shè)置你的第一個Next.js項(xiàng)目(非常詳細(xì)!)

    Next.js是一個基于React的全棧框架,旨在幫助開發(fā)者構(gòu)建高性能、可擴(kuò)展的Web應(yīng)用,這篇文章主要介紹了如何設(shè)置你的第一個Next.js項(xiàng)目的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • Redux DevTools不能顯示數(shù)據(jù)問題

    Redux DevTools不能顯示數(shù)據(jù)問題

    這篇文章主要介紹了Redux DevTools不能顯示數(shù)據(jù)問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 深入理解React Native核心原理(React Native的橋接(Bridge)

    深入理解React Native核心原理(React Native的橋接(Bridge)

    這篇文章主要介紹了深入理解React Native核心原理(React Native的橋接(Bridge),本文重點(diǎn)給大家介紹React Native的基礎(chǔ)知識及實(shí)現(xiàn)原理,需要的朋友可以參考下
    2021-04-04
  • React中使用async validator進(jìn)行表單驗(yàn)證的實(shí)例代碼

    React中使用async validator進(jìn)行表單驗(yàn)證的實(shí)例代碼

    react上進(jìn)行表單驗(yàn)證是很繁瑣的,在這里使用async-validator處理起來就變的很方便了,接下來通過本文給大家介紹React中使用async validator進(jìn)行表單驗(yàn)證的方法,需要的朋友可以參考下
    2018-08-08

最新評論

望谟县| 海晏县| 绿春县| 湟源县| 徐州市| 临高县| 鄂托克旗| 潞西市| 广平县| 双城市| 老河口市| 襄垣县| 广德县| 垦利县| 华池县| 崇信县| 米脂县| 通辽市| 冀州市| 疏附县| 历史| 新巴尔虎左旗| 四会市| 西充县| 黑水县| 大关县| 当雄县| 清涧县| 济阳县| 汨罗市| 新密市| 嘉祥县| 金乡县| 永泰县| 耿马| 犍为县| 广南县| 廉江市| 上林县| 区。| 都匀市|