其实简单的说就是编辑框很多按钮,所有按钮的功能都是以command形式提供,所以execCommand就是执行这些功能的命令。
有些按钮是能弹出显示一个对话框,他的基类就是dialog,而所有被弹出的dialog框子都在dialogs文件夹中,也就是说逻辑就在那里面。
我们上传图片完事后会有个确认和取消的按钮,这个按钮来自于dialog基类,这个类厘米有个onok就是我们关注的内容了,点击确定了才能将文件插入到编辑框文档中嘛,所以关注它,在这个代码逻辑中确实实现了该按钮的功能,也就是上述的execCommand('inserimage'),而调头回去看整体代码all.js中,看到了insertimage功能部分,有两个事件可以被我们用editor.addListener所截获,一个是beforeinsertimage,一个是afterinsertimage,所以我们可以在我们的代码中加入这个事件来获取得到我们想要的被上传的文件地址了。

也就大功告成了!

下面详情:

3、UEditor 1.4.3.2版本单独(独立打开上传图片窗口)

/**
* Created by Web on 16/3/4.
*/

/*
资源来自:http://blog.csdn.net/yangzhihello/article/details/16975607

使用方法:
我这里没写完,主要讲一下代码原理啊,其实下面代码已经可以用了,你可以再自己改一下吧。
$('你的按钮').upload(function(list){

});

*/
(function($){
var upload = {
editor:null,
init:function(editorid,callback){
var _editor =this.getEditor(editorid);
_editor.ready(function () {

//_editor.setDisabled(); // 如果使用这个则无法获取到事件

_editor.hide();
_editor.addListener('beforeinsertimage', function (t, args) {
//$("#"+keyid).val(args[0].src);
callback(args);
console.log(t)
console.log(args)
alert(args);
});
});
},
getEditor:function(editorid){
this.editor = UE.getEditor(editorid);
return this.editor;
},
show:function(that){
var _editor = this.editor;
//注意这里只需要获取编辑器,无需渲染,如果强行渲染,在IE下可能会不兼容(切记)
//和网上一些朋友的代码不同之处就在这里
$(that).click(function(){
var image = _editor.getDialog("insertimage");
image.render();
image.open();
});
},
render:function(editorid){
var _editor = this.getEditor(editorid);
_editor.render();
}
};

/*
* 事件激发对象
* 存放图片容器
* */

$.fn.upload = function(callback){

$('#ueditor-upload').size() <= 0 && $('<script id="ueditor-upload" type="text/plain" style="display:none"></script>').appendTo('body');
upload.init("ueditor-upload",callback);
upload.show(this);
}

})(jQuery);

全部解释:

我先说一下怎么回事啊,
首先UEditor有个基类叫Dialog,你可以在ueditor.all.js(该文件将项目所有JS合并到一起了)搜到这个类,
关键词Dialog.prototype或Dialog = baidu.ed都能搜到,行数26809

你看这个基类里面有个open方法,open肯定是打开窗口呀?所以我们点那个按钮才会弹出个框么,
再看看我们的上传图片的窗口,它实际在你的UEditor下载的包中的dialogs文件夹中的image文件夹
里面有几个文件,

其中image.js就是它真实的代码逻辑了,之前1.3.6以前的版本都是用swfupload,后来用了webuploader(这是我咬牙看github上的各个版本区别的时候发现的)
确定按钮的代码在image.js中的74行,关键词:function initButtons() {

这个onok的方法就是dialog基类中的确认按钮了,我们看他干了什么。

case 'upload':
list = uploadImage.getInsertList();

var count = uploadImage.getQueueCount();
if (count) {
$('.info', '#queueList').html('<span style="color:red;">' + '还有2个未上传文件'.replace(/[\d]/, count) + '</span>');
return false;
}
break;

他判断了个id,因为有4个选项卡么,什么插入图片、上传图片、远程图片什么的,我们关注的是上传图片,
所以看了这个case

他在上传完成后没有问题的情况下不return,否则返回false也就上传失败了,再往下看

if(list) {
editor.execCommand('insertimage', list);
remote && editor.fireEvent("catchRemoteImage");
}

如果有文件列表的话(上传成功),那么就execCommand(insertimage)了,那么这代码从来哪来的?是在ueditor.all.js中的11090行,
关键词:UE.commands['insertimage'] = {

if(me.fireEvent('beforeinsertimage', opt) === true){
return;
}
这里他有个fireEvent的beforeinsertimage,所以我们可以截获这个事件!

那么有了上述给出的代码,

_editor.addListener('beforeinsertimage', function (t, args) {
//$("#"+keyid).val(args[0].src);
callback(args);
console.log(t)
console.log(args)
alert(args);
});

然后我们就可以在这里取出那个列表值,也就是上传图片的真实路径了,那么我加了个callback,我可以在自己的页面DOM中处理完成后的事件了。

还有点其他的记录一下:

1、UEditor不用JSP使用Servlet来获取config.json

首先要弄清楚几个路径:
String rootPath = request.getServletContext().getRealPath("/");
response.getWriter().write(new ActionEnter(request, rootPath).exec());

response.getWriter().write(rootPath+request.getContextPath()+request.getRequestURI() );

第一个是rootPath,他指的是你的实际根目录所在路径
Mac/Linux : /usr/xxx/yourweb
Windows : c:/users/xxx/yourweb

第二个是你的请求路径request.getContextPath(),例如/admin/upload
第三个是其它

百度的UEditor获取config.json是用rootPath(绝对路径)+你的请求路径/admin/upload的上一层(代码中getParnet()了)
【代码所在ConfigManager.java搜this.parentPath = file.getParent();】

也就是上述的:
/usr/xxx/yourweb/admin/config.json

2、UEditor显示目录下所有图片(上传图片中的图片管理功能)

注意这里:
FileManager.java搜下面代码

public FileManager ( Map<String, Object> conf ) {

this.rootPath = (String)conf.get( "rootPath" );
this.dir = this.rootPath + (String)conf.get( "dir" );
this.allowFiles = this.getAllowFiles( conf.get("allowFiles") );
this.count = (Integer)conf.get( "count" );

}

ActionEnter.java搜下面代码

case ActionMap.LIST_FILE:
conf = configManager.getConfig( actionCode );
int start = this.getStartIndex();
state = new FileManager( conf ).listFile( start );
break;

configManager.java中的

case ActionMap.LIST_FILE:
conf.put( "allowFiles", this.getArray( "fileManagerAllowFiles" ) );
conf.put( "dir", this.jsonConfig.getString( "fileManagerListPath" ) );
conf.put( "count", this.jsonConfig.getInt( "fileManagerListSize" ) );
break;

config.json中的

"fileManagerListPath": "/uploads/files/", /* 指定要列出文件的目录 */

rootPath是绝对路径,
dir是由rootPath + dir(来自configManager.java中的从config.json获取的)拼接到一起的

所以按我的是

/usr/xxx/yourweb/uploads/files/

所以你得保证你的路径对应的上才能正常访问!!

ueditor 1.4.3.2 独立/单独 上传图片框原理的更多相关文章

  1. [转]kindeditor隐藏上传图片框网络图片或本地上传的功能

    原文地址:http://www.lingchenliang.com/post/154.html kindeditor富文本编辑器点击上传图片按钮,在弹出的窗口中去掉上传网络图片的功能,只留下本地上传, ...

  2. WebUploader UEditor chrome 点击上传文件选择框会延迟几秒才会显示 反应很慢

    chrome52.0.2743.80以上, accept: { title: 'Images', extensions: 'jpg,jpeg,png', mimeTypes: 'image/*' } ...

  3. ueditor编辑器插件 chrome中图片上传框延时问题

    最近在项目中使用ueditor插件进行文字的在线编辑功能时,发现这个插件的图片上传弹框在chrome浏览器延迟非常的厉害.经过多方搜索,终于解决.现将解决方案记录如下: 1.修改/Ueditor/di ...

  4. javascript 无刷新上传图片之原理

    刚开始我认为可以像ajax 那样获取到数据然后通过ajax 发送请求,后来发现浏览器为了客户端的安全默认并没有给javascript 这个权限.这个方法当然是行不同了.我看了好像开源的上传图片原理,当 ...

  5. 独立成分分析 ICA 原理及公式推导 示例

    独立成分分析(Independent component analysis) 前言 独立成分分析ICA是一个在多领域被应用的基础算法.ICA是一个不定问题,没有确定解,所以存在各种不同先验假定下的求解 ...

  6. Unity编辑器-创建单独编辑框,折叠框,提示框

    今天我们就来学习如何创建一个编辑框,上面绘制一个折叠框里面有四种消息框. 代码如下: using UnityEngine; using System.Collections; using UnityE ...

  7. 使用Ueditor上传图片到图片服务器(一)

    网站的文章,通过运营平台来发布文章(图文消息),上传图片等.百度Ueditor比较成熟就采用了该技术,另外上传的图片是网站系统以及运营平台系统共享的,所以考虑搭建独立的图片服务器,以后也可以提供给公司 ...

  8. 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...

  9. 百度编辑器UEditor 点击上传图片选择框会延迟几秒才会显示 反应很慢(转)

    转自:http://www.blogxuan.com/php/show/323.html UEditor 编辑器点击上传文件选择框会延迟几秒才会显示,反应很慢,上传图片选择框显示很慢. 1.uedit ...

随机推荐

  1. 3 B. Lorry

    题目大意:给你两种物品,每种物品有一个价值和花费,花费只有两种,一种花费为 , 一种花费为2.. 给你一个背包容量为v, 求当前容量下所能达到的最大价值. ====================== ...

  2. C++递归求解N个元素的所有子集

    C++递归求解N个元素的所有子集 引言: 我在复习C++遇到了设计递归函数的问题.这个例子,很好的显示了设计递归的方式,思想. 这与斐波那数列不同,这个例子更有应用意义. 问题: 试编写一个递归函数, ...

  3. C - How Many Tables - HDU-1213

    某个人举办生日宴会邀请了很多人来参加,不过呢,这些人有个毛病他们只会与熟悉人的坐在一起,当然他们也信奉朋友的朋友也是朋友这一法则,所以问最少需要多少张桌子...... 好吧我承认这才是裸并查集.... ...

  4. the identity used to sign the executable is no longer valid.解决方法

    the identity used to sign the executable is no longer valid.解决方法 一.重新下载Provisioning Profile 1.到devel ...

  5. webstrom开发微信小程序说明

    在操作之前,需要对webstrom做一些设置,如下 如果未安装node.js的朋友,请到如下地址 https://nodejs.org/en/ 安装(相信大家都是会的),如果安装完了之后,就使用如下的 ...

  6. .Net动态加载插件-反射

    /// <summary> /// 动态加载插件 /// </summary> void LoadPlugin() { string[] ps = Directory.GetF ...

  7. 常用的Linux操作二

    1.sudo  说明:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行 . 2.who      说明 : 显示系统中有那些使用者正在上面,显示的资料包含 ...

  8. IOS UIButton使用详解

    第一.UIButton的定义 UIButton *button=[[UIButton buttonWithType:(UIButtonType); 能够定义的button类型有以下6种, typede ...

  9. 站内信,群发与全部发送。Gson解析result

    /** * 发送站内信 */@Permission(Module.TZGL)@RequestMapping(value = "/sendznx", method = Request ...

  10. 使用jQuery Mobile和Phone Gap开发Android应用程序(转)

    经过了一段时间的学习,初步了解了该如何使用jQuery Mobile和 Phone Gap来开发一个Android应用程序,也想把这些东西介绍给大家. 1. 软件准备 要进行android app的开 ...