zoukankan      html  css  js  c++  java
  • 扩展ExtJs 4.2.1 htmleditor 添加图片功能

      做项目的时候遇到这样一个问题,因为我是用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,
                     60
                },
                handler: function () {
                    scope.showImgWindow(view);
                }
            });
        },
    
        /**
        * 显示"插入图片"窗体
        * */
        showImgWindow: function (view) {
            var scope = this;
            Ext.create('Ext.window.Window', {
                 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

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

  • 相关阅读:
    1-EI-灵魂画手解释安卓的Message对象
    2-VVI-材料设计之TabLayout下标签
    1.安卓基础之Activity生命周期
    golang复制一个指针对象(反射)
    小罗的面试题
    http1.0 、http1.1和http2.0的区别
    HTTP长连接、短连接究竟是什么?
    详解TCP中的拥塞控制
    TCP怎么保证传输的安全性
    ulimit设置完在其他用户上没有生效解决办法
  • 原文地址:https://www.cnblogs.com/zhangwei595806165/p/3598543.html
Copyright © 2011-2022 走看看