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 面向对象 对象(Object)
May 13 Javascript
jQuery之尺寸调整组件的深入解析
Jun 19 Javascript
js获得当前时区夏令时发生和终止的时间代码
Feb 23 Javascript
js实现文本框选中的方法
May 26 Javascript
Node.js的Web模板引擎ejs的入门使用教程
Jun 06 Javascript
vue.js学习笔记:如何加载本地json文件
Jan 17 Javascript
详细分析单线程JS执行问题
Nov 22 Javascript
vue.js整合mint-ui里的轮播图实例代码
Dec 27 Javascript
angularjs实现分页和搜索功能
Jan 03 Javascript
Vue.js添加组件操作示例
Jun 13 Javascript
vue移动端轻量级的轮播组件实现代码
Jul 12 Javascript
JS setTimeout与setInterval的区别
Apr 20 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_slice函数的使用以及参数详解
2008/08/30 PHP
四个PHP非常实用的功能
2015/09/29 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
JS设计模式之数据访问对象模式的实例讲解
2017/09/30 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
Python中对列表排序实例
2015/01/04 Python
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
python创建关联数组(字典)的方法
2015/05/04 Python
Python中pillow知识点学习
2018/04/30 Python
详解Python中的四种队列
2018/05/21 Python
python中while和for的区别总结
2019/06/28 Python
python3.6编写的单元测试示例
2019/08/17 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
python logging模块的使用详解
2020/10/23 Python
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
酒店前台接待岗位职责
2013/12/03 职场文书
施工班组长岗位职责
2014/01/05 职场文书
甜点店创业计划书
2014/01/27 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
中学推普周活动总结
2015/05/07 职场文书
集结号观后感
2015/06/08 职场文书
MySQL系列之四 SQL语法
2021/07/02 MySQL