UEditor 自定义图片视频尺寸校验功能的实现代码


Posted in Javascript onOctober 20, 2020

ueditor是百度编辑器,官网地址:http://ueditor.baidu.com/website/

UEditor支持单图、多图以及视频上传,编辑器配置项支持文件格式、文件大小校验,对于文件宽高尺寸校验暂不支持。这里记录一下自定义图片、视频尺寸校验过程,内容核心主要是扩展校验逻辑和增加自定义提示文本。

单图上传

单图上传的逻辑在ueditor.all.js中,由simpleUpload组件实现,其内部是通过监听file输入框的变化,来进行文件校验和上传。
下图initUploadBtn为初始化简单上传按钮方法,也是进行相关校验的地方。

UEditor 自定义图片视频尺寸校验功能的实现代码

initUploadBtn里默认校验代码如下:

var form = btnIframeDoc.getElementById('edui_form_' + timestrap);
var input = btnIframeDoc.getElementById('edui_input_' + timestrap);
var iframe = btnIframeDoc.getElementById('edui_iframe_' + timestrap);
domUtils.on(input, 'change', function(){
 if(!input.value) return;
 // 省略部分代码
 /* 判断后端配置是否没有加载成功 */
 if (!me.getOpt('imageActionName')) {
  errorHandler(me.getLang('autoupload.errorLoadConfig'));
  return;
 }
 // 判断文件格式是否错误
 var filename = input.value,
  fileext = filename ? filename.substr(filename.lastIndexOf('.')):'';
 if (!fileext || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) {
  showErrorLoader(me.getLang('simpleupload.exceedTypeError'));
  return;
 }  
 
 // 校验通过,上传文件
 domUtils.on(iframe, 'load', callback);
 form.action = utils.formatUrl(imageActionUrl + (imageActionUrl.indexOf('?') == -1 ? '?' : '&') + params);
 form.submit();
});

可以看到这里有好几处判断逻辑,全部通过后才提交表单上传文件。对于图片视频的尺寸校验,同样也可以加在这里,通过后才提交,以下为修改后的代码:

var form = btnIframeDoc.getElementById('edui_form_' + timestrap);
var input = btnIframeDoc.getElementById('edui_input_' + timestrap);
var iframe = btnIframeDoc.getElementById('edui_iframe_' + timestrap);
domUtils.on(input, 'change', function(){
 if(!input.value) return;
 // 省略部分代码
 /* 判断后端配置是否没有加载成功 */
 if (!me.getOpt('imageActionName')) {
  errorHandler(me.getLang('autoupload.errorLoadConfig'));
  return;
 }
 // 判断文件格式是否错误
 var filename = input.value,
  fileext = filename ? filename.substr(filename.lastIndexOf('.')):'';
 if (!fileext || (allowFiles && (allowFiles.join('') + '.').indexOf(fileext.toLowerCase() + '.') == -1)) {
  showErrorLoader(me.getLang('simpleupload.exceedTypeError'));
  return;
 }  
 //校验文件尺寸宽度
 var files = this.files;
 var reader = new FileReader();
 reader.readAsDataURL(input.files[0]);
 reader.onload = function (theFile) {
  var image = new Image();
  image.src = theFile.target.result;
  image.onload = function () {
   if (this.width < 1080) {
    showErrorLoader('宽度小于1080');
    return;
   }   
   // 校验通过,上传文件
   domUtils.on(iframe, 'load', callback);
   form.action = utils.formatUrl(imageActionUrl + (imageActionUrl.indexOf('?') == -1 ? '?' : '&') + params);
   form.submit();
   };
  };
});

代码中的校验参数1080,和提示文本规范作法是加在配置文件中,这里只起演示作用。

新增的尺寸校验,是使用FileReader读取上传的文件获得宽高,进而能够实现相关尺寸或者比例判断,校验效果如下:

UEditor 自定义图片视频尺寸校验功能的实现代码

多图上传

多图上传主要涉及三个文件,image.htmlwebupload.jsimage.js
webupload.js包含各种验证,包括文件总大小是否超出、单文件是否超出、文件是否重复等等,这里也可以增加自定义验证,它们会在Uploader初始化时被一并加载。

UEditor 自定义图片视频尺寸校验功能的实现代码

新增自定义图片尺寸校验方法如下:

/**
   * @property {int} [fileSingleWidth=undefined]
   * @namespace options
   * @for Uploader
   * @description 验证单个文件尺寸满足要求, 不满足则不允许加入队列。
   */
  //======================
  api.addValidator('fileSingleWidth', function () {
   var uploader = this,
    opts = uploader.options,
    minWidth = 1080;

   uploader.on('beforeFileQueued', function (file) {
    let that = this;
    let type = file.type;
    window.URL = window.URL || window.webkitURL;

    var reader = new FileReader();
    reader.readAsDataURL(file.source.source);
    reader.onload = function (theFile) {
     var image = new Image();
     image.src = theFile.target.result;
     image.onload = function () {
      if (this.width < minWidth) {
       file.setStatus(WUFile.Status.INVALID, 'exceed_width');
       that.trigger('error', 'F_EXCEED_SIZE', file);
       that.removeFile(file);
       return false;
      }
     };
    }
   });
  });

校验逻辑写好后,需要在image.jsaddFile方法中增加提示文本。

UEditor 自定义图片视频尺寸校验功能的实现代码

校验效果:

UEditor 自定义图片视频尺寸校验功能的实现代码

视频上传

视频上传同样也包含三个文件,video.htmlwebupload.jsvideo.js,处理逻辑与多图上传一样。我们可以在上面校验图片宽度的基础上再扩展支持校验视频分辨率是否小于720,代码如下:

/**
   * @property {int} [fileSingleWidth=undefined]
   * @namespace options
   * @for Uploader
   * @description 验证单个文件尺寸满足要求, 不满足则不允许加入队列。
   */
  //======================
  api.addValidator('fileSingleWidth', function () {
   var uploader = this,
    opts = uploader.options,
    minWidth = 1080;
   
   uploader.on('beforeFileQueued', function (file) {
    let that = this;
    let type = file.type;
    window.URL = window.URL || window.webkitURL;
    // 校验视频分辨率
    if (type.indexOf('video') > -1) {
     var video = document.createElement('video');
     video.preload = 'metadata';
     video.src = URL.createObjectURL(file.source.source);
     video.onloadedmetadata = () => {
      URL.revokeObjectURL(video.src);            
      if (video.videoHeight < 720) {
       file.setStatus(WUFile.Status.INVALID, 'exceed_height');
       that.trigger('error', 'F_EXCEED_SIZE', file);
       that.removeFile(file);
       return false;
      }
     }
    }else{
     //校验图片宽度
     var reader = new FileReader();
     reader.readAsDataURL(file.source.source);
     reader.onload = function (theFile) {
      var image = new Image();
      image.src = theFile.target.result;
      image.onload = function () {
       if (this.width < minWidth) {
        file.setStatus(WUFile.Status.INVALID, 'exceed_width');
        that.trigger('error', 'F_EXCEED_SIZE', file);
        that.removeFile(file);
        return false;
       }
      };
     }
    }
   });
  });

vedio.jsaddFile方法中增加校验文本

UEditor 自定义图片视频尺寸校验功能的实现代码

校验效果:

UEditor 自定义图片视频尺寸校验功能的实现代码

到此这篇关于UEditor 自定义图片视频尺寸校验功能的实现代码的文章就介绍到这了,更多相关UEditor自定义图片视频内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript 写类方式之九
Jul 05 Javascript
基于jQuery的仿flash的广告轮播
Nov 05 Javascript
jquery indexOf使用方法
Aug 19 Javascript
深入理解JS中的变量及作用域、undefined与null
Mar 04 Javascript
Jquery中扩展方法extend使用技巧
Aug 24 Javascript
浅谈json取值(对象和数组)
Jun 24 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
React+react-dropzone+node.js实现图片上传的示例代码
Aug 23 Javascript
详解vue axios中文文档
Sep 12 Javascript
Node.js 使用AngularJS的方法示例
May 11 Javascript
小程序封装路由文件和路由方法(5种全解析)
May 26 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
Jun 15 Javascript
Vue+axios封装请求实现前后端分离
Oct 23 #Javascript
构建一个JavaScript插件系统
Oct 20 #Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
Oct 20 #Javascript
原生js实现俄罗斯方块
Oct 20 #Javascript
React实现评论的添加和删除
Oct 20 #Javascript
基于JavaScript实现简单抽奖功能代码实例
Oct 20 #Javascript
微信小程序使用前置摄像头拍照
Oct 22 #Javascript
You might like
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
使用Python构建Hopfield网络的教程
2015/04/14 Python
python os用法总结
2018/06/08 Python
基于python中theano库的线性回归
2018/08/31 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
前台文员个人求职信范文
2014/01/05 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
国庆节活动总结
2014/08/26 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
教师创先争优承诺书
2015/04/27 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
教师培训简讯
2015/07/20 职场文书
厉行节约工作总结
2015/08/12 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
Python中文纠错的简单实现
2021/07/07 Python
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python
Python first-order-model实现让照片动起来
2022/06/25 Python