ant-design-vue 的upload組件之圖片上傳前的圖片寬高判斷


須知知識點:

  • FileReader()對象
  • Image()對象
  • upload組件

有一個需求,需要判斷上傳的圖片的寬高,限制800*800像素大小,用的是ant-design-vue框架。

1.原生的input type="file"判斷圖片大小的方法如下:

HTML:

<input type="file" id="img">
<h1 id="h1"></h1>

JS:

 1 img.onchange=function(e){
 2     // e.target.files[0]表示選取的第一個文件
 3     console.log(e.target.files[0]);
 4     // FileReader對象將文件讀取為dataURL格式
 5     let reader=new FileReader();
 6     reader.readAsDataURL(e.target.files[0]),
 7     // load事件在讀取操作結束的時候觸發
 8     reader.onload=()=>{
 9         const img=new Image();
10         // FileReader.result返回文件的內容。只有在讀取操作完成后,此屬性才有效,返回的數據的格式取決於是使用哪種讀取方法來執行讀取操作的。
11         img.src=reader.result;
12         // 如果此時直接獲取img的寬高結果是0,只有當圖片加載結束以后(load)獲取才能獲取到
13         img.onload=()=>{
14             let w=img.width;
15             let h=img.height;
16             h1.innerHTML=`寬:${w}-高${h}`
17         }
18     }
19 }

 

2.ant-design-vue中使用upload組件中獲取圖片大小的方式如下:

template:

<a-upload
        accept="image/jpg,image/jpeg,image/png"
        action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
        list-type="picture-card"
        :file-list="imgList"
        @preview="handlePreview"
        @change="handleChange"
        :beforeUpload="beforeUpload"
      >
</a-upload>

 

開始在handleChange方法中判斷img文件,它傳入的是一個已經選擇文件的列表,他的內容如下:

 

如果直接用這個列表中單個元素來執行上述圖片判斷,則會報錯:

 

 

 

原生js中的input type="file"打印出來e.target.files[0]結構如下:

 

 這就是讀取失敗的原因,展開ant-design-vue中的originFileObj屬性,發現原生file的內容被放到這里了:

而且再把beforeUpload文件上傳前鈎子函數中的默認傳入的參數file打印出來發現就是原生input type="file"的內容,所以直接在beforeUpload鈎子函數中直接判斷圖片的width和height中即可。

 1 // 上傳文件之前的鈎子
 2   beforeUpload(file){
 3     console.log("beforeUpload中:",file);
 4     let reader = new FileReader();
 5     reader.readAsDataURL(file);
 6     reader.onload=()=>{
 7       const image=new Image();
 8       image.src=reader.result;
 9       image.onload=()=>{
10         let w=image.width;
11         let h=image.height;
12         console.log("寬高:",w,h);
13       }
14     }
15     return false;
16   }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM