做项目的时候遇到这样一个问题,因为我是用ExtJs做的后台管理框架,所以当我使用ExtJs htmleditor 控件

的时候,发现没有图片上传的功能,于是我打算在网上找找有关的文章,居然真有人写过,不过可惜的是,不支持

ExtJs 4.2.1版本,所以我再搜索,终于被我找到了,现在将代码贴出,本着开源精神,我将代码开源,最后我想

感谢一个人:

马平川,cr10210206@163.com

正是他的奉献所以才完成这个功能的,非常感谢!

Ext.ns('zc');
/**
* 获取项目根路径
* */
zc.bp = function () {
var curWwwPath = window.document.location.href;
var pathName = window.document.location.pathname;
var pos = curWwwPath.indexOf(pathName);
var localhostPath = curWwwPath.substring(0, pos);
var projectName = pathName.substring(0, pathName.substr(1).indexOf('/') + 1);
return (localhostPath + projectName);
};
/**
* 获取小星星
* */
zc.getStar = function () {
return '<span style="color:#FF0000;">*</span>';
};
/**
* @Description Html编辑器 插入图片控件
* @author 张川(cr10210206@163.com)
*/
Ext.define('Ext.zc.form.HtmlEditorImage', {
extend: 'Ext.util.Observable',
alias: 'widget.zc_form_HtmlEditorImage',
langTitle: '插入图片',
langIconCls: 'heditImgIcon',
init: function (view) {
var scope = this;
view.on('render', function () {
scope.onRender(view);
});
}, /**
* 添加"插入图片"按钮
* */
onRender: function (view) {
var scope = this;
view.getToolbar().add({
iconCls: scope.langIconCls,
tooltip: {
title: scope.langTitle,
width: 60
},
handler: function () {
scope.showImgWindow(view);
}
});
}, /**
* 显示"插入图片"窗体
* */
showImgWindow: function (view) {
var scope = this;
Ext.create('Ext.window.Window', {
width: 400,
height: 305,
title: scope.langTitle,
layout: 'fit',
autoShow: true,
modal: true,
resizable: false,
maximizable: false,
constrain: true,
plain: true,
enableTabScroll: true,
//bodyPadding: '1 1 1 1',
border: false,
items: [{
xtype: 'tabpanel',
enableTabScroll: true,
bodyPadding: '1 1 1 1',
items: [{
title: '上传本地图片',
items: [{
xtype: 'form',
layout: 'column',
autoScroll: true,
border: false,
defaults: {
columnWidth: 1,
labelWidth: 70,
labelAlign: 'right',
padding: '5 5 5 5',
allowBlank: false
},
items: [{
xtype: 'fileuploadfield',
fieldLabel: '选择文件',
beforeLabelTextTpl: zc.getStar(),
buttonText: '请选择...',
name: 'upload',
emptyText: '请选择图片',
blankText: '图片不能为空',
listeners: {
change: function (view, value, eOpts) {
scope.uploadImgCheck(view, value);
}
}
}, {
xtype: 'fieldcontainer',
fieldLabel: '图片大小',
layout: 'hbox',
defaultType: 'numberfield',
defaults: {
flex: 1,
labelWidth: 20,
labelAlign: 'right',
allowBlank: true
},
items: [{
fieldLabel: '宽',
name: 'width',
minValue: 1
}, {
fieldLabel: '高',
name: 'height',
minValue: 1
}]
}, {
xtype: 'textfield',
fieldLabel: '图片说明',
name: 'content',
allowBlank: true,
maxLength: 100,
emptyText: '简短的图片说明'
}, {
columnWidth: 1,
xtype: 'fieldset',
title: '上传须知',
layout: {
type: 'table',
columns: 1
},
collapsible: false, //是否可折叠
defaultType: 'label', //默认的Form表单组件
items: [{
html: '1.上传图片不超过100KB'
}, {
html: '2.为了保证图片能正常使用,我们支持以下格式的图片上传'
}, {
html: '   jpg,jpeg,png,gif'
}]
}],
buttons: [{
text: '保存',
action: 'btn_save',
icon: '../../../Images/extjs/disk.png',
handler: function (btn) {
scope.saveUploadImg(btn, view);
}
}, {
text: '取消',
icon: '../../../Images/extjs/cross.png',
handler: function (btn) {
btn.up('window').close();
}
}]
}]
}, {
title: '链接网络图片',
items: [{
xtype: 'form',
layout: 'column',
autoScroll: true,
border: false,
defaults: {
columnWidth: 1,
labelWidth: 70,
labelAlign: 'right',
padding: '5 5 5 5',
allowBlank: false
},
items: [{
xtype: 'textfield',
fieldLabel: '图片地址',
beforeLabelTextTpl: zc.getStar(),
name: 'url',
emptyText: '请填入支持外链的长期有效的图片URL',
blankText: '图片地址不能为空',
vtype: 'remoteUrl'
}, {
xtype: 'fieldcontainer',
fieldLabel: '图片大小',
layout: 'hbox',
defaultType: 'numberfield',
defaults: {
flex: 1,
labelWidth: 20,
labelAlign: 'right',
allowBlank: true
},
items: [{
fieldLabel: '宽',
name: 'width',
minValue: 1
}, {
fieldLabel: '高',
name: 'height',
minValue: 1
}]
}, {
xtype: 'textfield',
fieldLabel: '图片说明',
name: 'content',
allowBlank: true,
maxLength: 100,
emptyText: '简短的图片说明'
}, {
columnWidth: 1,
xtype: 'fieldset',
title: '上传须知',
layout: {
type: 'table',
columns: 1
},
collapsible: false, //是否可折叠
defaultType: 'label', //默认的Form表单组件
items: [{
html: '1.上传图片不超过100KB'
}, {
html: '2.为了保证图片能正常使用,我们支持以下格式的图片上传'
}, {
html: '   jpg,jpeg,png,gif'
}]
}],
buttons: [{
text: '保存',
action: 'btn_save',
icon: '../../../Images/extjs/disk.png',
handler: function (btn) {
scope.saveRemoteImg(btn, view);
}
}, {
text: '取消',
icon: '../../../Images/extjs/cross.png',
handler: function (btn) {
btn.up('window').close();
}
}]
}]
}]
}]
});
}, /**
* 上传图片验证
**/
uploadImgCheck: function (fileObj, fileName) {
var scope = this;
//图片类型验证
if (!(scope.getImgTypeCheck(scope.getImgHZ(fileName)))) {
Ext.MessageBox.alert('温馨提示', '上传图片类型有误');
fileObj.reset(); //清空上传内容
return;
}
}, /**
* 获取图片后缀(小写)
* */
getImgHZ: function (imgName) {
//后缀
var hz = '';
//图片名称中最后一个.的位置
var index = imgName.lastIndexOf('.');
if (index != -1) {
//后缀转成小写
hz = imgName.substr(index + 1).toLowerCase();
}
return hz;
}, /**
* 图片类型验证
* */
getImgTypeCheck: function (hz) {
var typestr = 'jpg,jpeg,png,gif';
var types = typestr.split(','); //图片类型
for (var i = 0; i < types.length; i++) {
if (hz == types[i]) {
return true;
}
}
return false;
}, /**
* 上传图片
* */
saveUploadImg: function (btn, view) {
var scope = this;
var windowObj = btn.up('window'); //获取Window对象
var formObj = btn.up('form'); //获取Form对象
if (formObj.isValid()) { //验证Form表单
formObj.form.doAction('submit', {
url: zc.bp() + '/',
method: 'POST',
submitEmptyText: false,
waitMsg: '正在上传图片,请稍候...',
timeout: 60000, // 60s
success: function (response, options) {
var result = options.result;
if (!result.success) {
Ext.MessageBox.alert('温馨提示', result.msg);
return;
}
scope.insertImg(view, result.data);
windowObj.close(); //关闭窗体
},
failure: function (response, options) {
Ext.MessageBox.alert('温馨提示', options.result.msg);
}
});
}
}, /**
* 保存远程的图片
* */
saveRemoteImg: function (btn, view) {
var scope = this;
var windowObj = btn.up('window'); //获取Window对象
var formObj = btn.up('form'); //获取Form对象
if (formObj.isValid()) {//验证Form表单
var values = formObj.getValues(); //获取Form表单的值
scope.insertImg(view, values);
windowObj.close(); //关闭窗体
}
}, /**
* 插入图片
* */
insertImg: function (view, data) {
var url = data.url;
var content = data.content;
var width = data.width;
var height = data.height;
var str = '<img src="' + url + '" border="0" ';
if (content != undefined && content != null && content != '') {
str += ' title="' + content + '" ';
}
if (width != undefined && width != null && width != 0) {
str += ' width="' + width + '" ';
}
if (height != undefined && height != null && height != 0) {
str += ' height="' + height + '" ';
}
str += ' />';
view.insertAtCursor(str);
}
});

  像这样引用:

 {
xtype: 'htmleditor',
border: true,
id: 'context',
plugins: [
Ext.create('Ext.zc.form.HtmlEditorImage')
],
height: 400,
anchor: '100%'
}

  

总结:

最后,就是将你上传的图片保存在服务器上,所以在“saveRemoteImg()”方法里的ajax提交的url

你们可以自行发挥想保存在哪,这个我就不多说了。

扩展ExtJs 4.2.1 htmleditor 添加图片功能的更多相关文章

  1. [Swift通天遁地]五、高级扩展-(12)扩展故事板中的元件添加本地化功能

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. kindeditor-4.1.10 结合 Asp.Net MVC 添加图片功能

    KindEditor是一套开源的HTML可视化编辑器,现在我要结合Asp.Net MVC4 上传图片功能,做相应的配置和修改, 其实网上也有人写过类似的文章了,我写出来是以防以后使用的时候出现这样的问 ...

  3. KindEditor ctrl+v添加图片功能

    原理: 监听粘贴事件(paste) 获取粘贴版数据,读取到图片数据流进行加载base64 传到后台服务端直接输出为图片文件保存后返回图片读取路径插入编辑器中 /** * 获取编辑器对象 */ wind ...

  4. Swift - 给图片添加图片水印(图片上绘制另一张图,并可设透明度)

    我前面写了篇文章讲解如何给图片添加文字水印,而如果想要添加图片类型的水印也很简单,只要把原来代码里添加文字的部分改成图片即可. 1,效果图如下: (在图片左上角添加了一个半透明的logo图片) 2,为 ...

  5. C#如何在PDF文件添加图片印章

    文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性.C#添加图片印章其实也有很多实现方法,这里我使用的是免费的第三方软件Free Spire.PDF,向大家阐述 ...

  6. C# 给PDF添加图片背景

    C# 给PDF添加图片背景 今天要实现的是给PDF文件添加图片背景这个功能.PDF是近年来最流行的文件之一,无论是办公还是日常生活中都经常会用到,很多时候,PDF文件的背景色都是白色,看多了难免觉得累 ...

  7. 黄聪:phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护

    首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包含了PHPExcel.php和PHPExcel的文件夹,这个类文件和文件夹是我们需要的,把class ...

  8. C# 利用占位符替换word中的字符串和添加图片

    利用占位符替换word中的字符串和添加图片   ///<summary>         /// 替换word模板文件内容,包括表格中内容         /// 调用如下:WordStr ...

  9. pyside 为窗口添加图片

    有时我们需要添加一些图片到窗口上,下面给一个通过QLable实现的方法. 这里需要注意的是,当你启用多线程时,方法调用的setPixmap,会导致qt报出一个线程安全错误. 因此,让这个绘图工作尽量在 ...

随机推荐

  1. px和em之间的转换

    很多网页设计者在写css时都是在通用选择器中就设置了字体的大小,中文情况下一般为12px.然而IE浏览器却无法调整那些使用px作为单位的字体大小.其实使用em作为单位是可以避免这一情况的. 一.em和 ...

  2. 解决Jquery和prototype的兼容问题

    1. 引入jquery 时,将jquery库在 prototype之前引入: 2.使用时: jQuery.noConflict();  // 这个要在 之前加上 3.初始化加载 (这里我试过,可以有两 ...

  3. sql常识-like

    LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. LIKE 操作符 LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式. SQL LIKE 操作符语法 SELECT colum ...

  4. 译:Spring框架参考文档之IoC容器(未完成)

    6. IoC容器 6.1 Spring IoC容器和bean介绍 这一章节介绍了Spring框架的控制反转(IoC)实现的原理.IoC也被称作依赖注入(DI).It is a process wher ...

  5. 一个简单的Makefile的编写【用自己的话,解释清楚这些】

    用自己的话,解释清楚这些~ Makefile是程序员编写出来指导编译器编译程序源码为目标文件(可执行文件,或链接库) 这里只写一个简单的Makefile 作为例子 其需求如下: frank@ubunt ...

  6. Cocos开发中性能优化工具介绍之Xcode中Instruments工具使用

    Instruments是动态分析工具,它与Xcode集成在一起,可以在Xcode中通过菜单Product→Profile启动.启动如图所示,Instruments有很多跟踪模板可以动态分析和跟踪内存. ...

  7. Cocos2d-x中自定义粒子系统

    除了使用Cocos2d-x的11种内置粒子系统外,我们还可以通过创建ParticleSystemQuad对象,并设置属性实现自定义粒子系统,通过这种方式完全可以实现我们说需要的各种效果的粒子系统.使用 ...

  8. Swift数字类型之间的转换

    Swift数字类型之间的转换Swift是一种安全的语言,对于类型的检查非常严格,不同类型之间不能随便转换.一.整型之间的转换在C和Objective-C等其他语言中,整型之间有两种转换方法:从小范围数 ...

  9. C#解析Json格式数据小结

    最近,遇到了一些不同的Json格式的数据,需要做不同处理才能转化为想要得到的结果,这里总结一下. 第一种形式:status中是{}形式,对象 string json = @"{'name': ...

  10. (转)重磅出击:MongoDB 3.0正式版即将发布

    MongoDB 今天宣布 3.0 正式版本即将发布.这标志着 MongoDB 数据库进入了一个全新的发展阶段,提供强大.灵活而且易于管理的数据库管理系统. MongoDB 3.0 在性能和伸缩性方面都 ...