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 相关文章推荐
IE6、IE7中获取Button元素的值的bug说明
Aug 28 Javascript
table对象中的insertRow与deleteRow使用示例
Jan 26 Javascript
JS动态添加Table的TR,TD实现方法
Jan 28 Javascript
JavaScript获取按钮所在form表单id的方法
Apr 02 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
Jun 23 Javascript
jquery实现移动端点击图片查看大图特效
Sep 11 Javascript
jquery按回车键实现表单提交的简单实例
May 25 Javascript
基于Bootstrap+jQuery.validate实现表单验证
May 30 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
Jan 19 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
Aug 25 Javascript
20个最常见的jQuery面试问题及答案
May 23 jQuery
详解Vue This$Store总结
Dec 17 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 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
python使用tkinter实现简单计算器
2018/01/30 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
numpy向空的二维数组中添加元素的方法
2018/11/01 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
2020/03/17 HTML / CSS
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
Final类有什么特点
2012/04/25 面试题
毕业生个人求职的自我评价
2013/10/28 职场文书
酒店前厅员工辞职信
2014/01/08 职场文书
开工仪式主持词
2014/03/20 职场文书
房展策划方案
2014/06/07 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
导游词之江南周庄
2019/12/06 职场文书
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript