根据图片url链接判断图片大小

更新日期: 2020-07-17 阅读: 2.8k 标签: 链接

背景:产品需求,input框输入图片链接,点击检测按钮的时候需要判断该图片不超过2M


一、UI实现

<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作用:获取value

inputOnChange(e) {
	this.setState({
	  inputUrl: e.target.value,
	});
};

三、identifyImage中校验图片链接格式和大小,我这边是分步校验的;

  • 第一步:检验url是否正确,用正则;
  • 第二步:检验是否有jpg/jpeg/png后缀;(这个其实真正的目的是想校验是否上传的是图片链接,这样写可能不好)
  • 第三步:判断图片大小;
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 {
			// ......
		  }
    	});
	}
};


四、judgeImageSizeByUrl判断文件大小

先前我以为最简单的办法,直接将url转换成blob对象,获取blob.size来比较;

其实不然,这种是错误的

judgeImageSizeByUrl(url) {
let blob = new Blob([url]);
	if (blob.size > 2048) {
	  this.setState({
	    imageErrorMsg: '图片文件过大,请选择2MB以下的图',
	  });
	  return false;
	}
}

正确的方法如下 (Note: 图片必须是同源的(即项目和图片必须是同源的))

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

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/9509

css链接link_CSS :link 伪类

链接可以使用任何css属性,包括字体、颜色、背景等等、链接有四个状态,可在四个状态时设置不同的属性,当为链接的不同状态设置样式时,需要遵循a:hover 必须位于a:link 和a:visited之后,a:active 必须位于 a:hover 之后

使用a标签超链接打开qq对话框

我们经常遇到,网页上点击一个链接或者qq图片,就开启了qq聊天窗口。那么如何通过a标签超链接打开qq对话框呢?下面介绍2种实现方式。

实现短链接服务(Node + Express + MongoDB)

短链接我们或多或少都使用过,所谓短链接就是根据较长的原链接url生成一段较短的链接,访问短链接可以跳转到对应的原链接,这样做好处在于:1. url更加美观;2. 便于保存和传播;3. 某些网站内容发布有字数限制,短链接可以节约字数

用 await/async 正确链接Js中的多个函数

在我完成 electrade 的工作之余,还帮助一个朋友的团队完成了他们的项目。最近,我们希望为这个项目构建一个 Craiglist 风格的匿名电子邮件中继,其中包含 “serverless” Google Firebase Function

Nginx 如何配置防盗链

需求:通常站点,都会想让自己网站的视频和图片,免被盗用,毕竟视频流量,花的都是白花花银子(土豪可以不用考虑)~~。vaild_referers 有效的引用连接,如下,否则就进入$invaild_refere,返回403 forbiden。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!