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