<div className={less.detection}> <input className={less.input} placeholder="請輸入圖片URL" onChange={(e) => this.inputOnChange(e)} /> <button type="button" className={less.button} onClick={(e) => this.identifyImage(e, inputUrl, 0)}>檢測</button> </div>
inputOnChange(e) { this.setState({ inputUrl: e.target.value, }); };
const urlRegexp = /^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/; identifyImage(e, image, index) { if (e && e.preventDefault) { e.preventDefault(); } if (urlRegexp.test(image)) { if (!((image.indexOf('.jpg') !== -1) || (image.indexOf('.jpeg') !== -1) || (image.indexOf('.png') !== -1))) { Message.error('請輸入正確的圖片url'); return; } // 判斷圖片大小【Note:圖片和項目必須是同源的,不然會報跨域錯誤】 this.judgeImageSizeByUrl('../../../static/1.png').then(result => { // result.size是字節,2M=2097152字節 if (result.size > 2097152) { this.handleImageErrorMsg('圖片文件過大,請選擇2MB如下的圖'); } else { // ...... } }); } };
http://www.ssnd.com.cn 化妝品OEM代加工javascript
先前我覺得最簡單的辦法,直接將url轉換成blob對象,獲取blob.size來比較;java
其實否則,這種是錯誤的跨域
judgeImageSizeByUrl(url) { let blob = new Blob([url]); if (blob.size > 2048) { this.setState({ imageErrorMsg: '圖片文件過大,請選擇2MB如下的圖', }); return false; } }
正確的方法以下 (Note: 圖片必須是同源的(即項目和圖片必須是同源的))less
judgeImageSizeByUrl = (url) => { return new Promise((resolve, reject) => { let xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.responseType = 'blob'; xhr.onerror = () => { reject(); }; xhr.onload = () => { if (xhr.status === 200) { resolve(xhr.response); } else { reject(); } }; xhr.send(); }); }