JavaScript头像图片上传插件支持上传类型大小尺寸验证

news/2024/7/19 13:48:47 标签: javascript, 前端, jquery, js

一行代码实现头像上传,图片大小、尺寸,类型验证

html调用

javascript"><img  src="这里放默认头像"  id="preview" onclick="uploader.fileInput.click()"/>

 js调用

javascript">	var uploader = new ImageUploader({
		  accept: ['jpg', 'png', 'gif'],
		  maxSize: 1,
		  maxWidth: 800,
		  maxHeight: 1000,
		  uploadUrl: 'upload',
		  success: function(url) {
		
             //上传成功回调
		     
		   }
		});

调用效果如图

 直接点击头像即可实现图片上传

以下是插件代码 

function ImageUploader(options) {
  this.options = options || {}; // 参数配置
  this.fileInput = null; // 文件输入框
  this.previewImage = null; // 预览图片
  this.uploadUrl = options.uploadUrl || '/upload'; // 上传接口地址(默认值为'/upload')

  // 初始化
  this.init();
}
// 初始化方法
ImageUploader.prototype.init = function() {
  var that = this;

  // 创建文件输入框
  this.createFileInput();

  // 监听文件选择事件
  this.fileInput.addEventListener('change', function(event) {
    var file = event.target.files[0];

    // 判断图片类型
    if (that.options.accept && !that.checkFileType(file)) {
      alert('只能上传 ' + that.options.accept.join(',') + ' 类型的图片');
      return;
    }

    // 判断图片大小
    if (that.options.maxSize && file.size > that.options.maxSize * 1024 * 1024) {
      alert('图片大小不能超过 ' + that.options.maxSize + 'MB');
      return;
    }

    // 验证图片尺寸
    var reader = new FileReader();
    reader.onload = function() {
      var img = new Image();
      img.onload = function() {
        if (that.options.maxWidth && img.width > that.options.maxWidth) {
          alert('图片宽度不能超过 ' + that.options.maxWidth + '像素');
          return;
        }
        if (that.options.maxHeight && img.height > that.options.maxHeight) {
          alert('图片高度不能超过 ' + that.options.maxHeight + '像素');
          return;
        }
        that.uploadFile(file);
      };
      img.src = reader.result;
    };
    reader.readAsDataURL(file);
  });
};
// 创建文件输入框
ImageUploader.prototype.createFileInput = function() {
  var input = document.createElement('input');
  input.type = 'file';
  input.style.display = 'none';
  if (this.options.accept) {
    input.accept = this.options.accept.join(',');
  }
  document.body.appendChild(input);
  this.fileInput = input;
};
// 检查文件类型是否符合要求
ImageUploader.prototype.checkFileType = function(file) {
  var fileType = file.type;
  if (!fileType) {
    return false;
  }
  fileType = fileType.split('/').pop();
  return this.options.accept.indexOf(fileType) !== -1;
};
// 执行上传操作
ImageUploader.prototype.uploadFile = function(file) {
  var that = this;
  var xhr = new XMLHttpRequest();
  xhr.open('POST', this.uploadUrl, true);
  xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  var formData = new FormData();
  formData.append('file', file);
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
      if (xhr.status === 200 || xhr.status === 201) {
        var responseText = JSON.parse(xhr.responseText);
        if (responseText.errno === 0) {
          that.showUploaded(responseText.data.url);
        } else {
          alert(responseText.msg);
        }
      } else {
        alert('上传失败,请稍后再试!');
      }
    }
  };
  xhr.send(formData);
};


http://www.niftyadmin.cn/n/269644.html

相关文章

使用aardio写一个基于pyocd的单片机下载器

1 新建工程 最开始本来是打算调用pyocd 的python api的&#xff0c;但是一个是内嵌包一直安装出问题&#xff0c;一个是考虑到本地pack不想重复安装和管理&#xff0c;于是就转做pyocd的前端了&#xff0c;也就是直接调用pyocd&#xff0c;根据返回数据解析&#xff0c;然后执…

信息化发展

信息系统是&#xff1a;管理模型、信息处理模型和系统实现条件结合的 信息系统生命周期&#xff1a; 可行性分析与项目开发计划 需求分析 概要设计 详细设计 编码 测试 可以简化为&#xff1a; 系统规划&#xff1a;现行情况的分析&#xff0c;可行性研究报告 -> 设计任务…

Java 中如何定义一个类(三)

Java是一种面向对象的编程语言&#xff0c;类是Java中最基本的概念之一。在Java中&#xff0c;通过定义类可以创建对象&#xff0c;并对这些对象进行操作。本文将介绍如何在Java中定义一个类&#xff0c;并给出相应的示例代码。 定义类 在Java中&#xff0c;定义类使用关键字…

ubuntu-server22.04编译Redis7.0.11源码支持TLS

1.克隆redis源码: git clone https://github.com/redis/redis.git 编译前确认已安装GCC11与G++11和cmake及make及pkg-config 安装命令如下: apt install gcc -y apt install g++ -y apt install cmake -y apt install pkg-config 因为要支持TLS所以要安装OPENSSL开发库 ap…

如何有效使用渲染农场?防止渲染出错的7个方法!

如何使用渲染农场&#xff1f;又如何有效地使用渲染农场&#xff0c;使用云渲染农场时出错怎么办&#xff1f; 众所周知我们可以在任意的笔记本或者终端PC上面来创作 3ds Max 场景&#xff0c;但是实际渲染是这样吗&#xff1f;其实不然&#xff0c;这其中的差距不是一星半点&…

【C语言】函数讲解(下)

【C语言】函数讲解&#xff08;下&#xff09; 1.函数的声明和定义1.1函数声明1.2函数定义 2.函数的嵌套调用和链式访问2.1嵌套调用2.2链式访问 3.函数递归3.1什么是递归3.2递归的两个必要条件3.2.1练习13.2.2练习2 3.3递归与迭代3.3.1练习13.3.2练习2 所属专栏&#xff1a;C语…

SSL证书周期变为90天? 锐成让您轻松应对行业新规

3月3日&#xff0c;谷歌在其“Move Forward, Together”栏目中&#xff0c;称已向CA/B论坛发起了投票提案&#xff0c;建议将公共TLS&#xff08;也称为SSL&#xff09;证书的最长有效期从398天减少到90天。值得注意的是&#xff0c;即便CA/B论坛没有通过这一提议&#xff0c;谷…

CVE漏洞复现-CVE-2021-22205 GitLab未授权 RCE

CVE-2021-22205 GitLab未授权 RCE 漏洞背景和描述 2021年4月15日&#xff0c;GitLab官方发布安全补丁更新修复了GitLab命令执行漏洞&#xff08;CVE-2021-22205&#xff09;。由于GitLab中的ExifTool没有对传入的图像文件的扩展名进行正确处理&#xff0c;攻击者通过上传特制…