Extjs4HtmlEditor图片上传插件

1 篇文章 0 订阅
1 篇文章 0 订阅

插件代码:

/*
*
*      Author : zhy
*        Date : 2013年2月21日
* Description : 插入图片插件
*
*/
Ext.define('TKW.Editor.Plugin.Image', {
    extend: 'Ext.util.Observable',
    alias: 'widget.PluginImage',
    langTitle: '<span class="commoncss">插入图片</span>',
    urlSizeVars: ['width', 'height'],
    basePath: '',
    constructor: function (config) {
        var me = this;

        Ext.applyIf(me.config, config);
        this.config = config;//保存初始化设置
        //解析设置
        me.url = config.url;           //请求地址
        me.callParent(arguments);
    },
    init: function (cmp) {
        this.cmp = cmp; //保存传入的元件
        this.cmp.on('initialize', this.onInit, this);//绑定初始化事件
        this.cmp.on('afterrender', this.onAfterrender, this);//绑定渲染事件
    },
    //鼠标放开
    onEditorMouseUp: function (e) {
        Ext.get(e.getTarget()).select('img').each(function (el) {
            var w = el.getAttribute('width'), h = el.getAttribute('height'), src = el.getAttribute('src') + ' ';
            src = src.replace(new RegExp(this.urlSizeVars[0]
							+ '=[0-9]{1,5}([&| ])'), this.urlSizeVars[0] + '='
							+ w + '$1');
            src = src.replace(new RegExp(this.urlSizeVars[1]
							+ '=[0-9]{1,5}([&| ])'), this.urlSizeVars[1] + '='
							+ h + '$1');
            el.set({
                src: src.replace(/\s+$/, "")
            });
        }, this);

    },
    //初始化
    onInit: function (htmlEditor, eOpts) {
        Ext.EventManager.on(htmlEditor.getDoc(), {
            'mouseup': this.onEditorMouseUp,
            buffer: 100,
            scope: this
        });
    },
    //渲染
    onAfterrender: function (component, eOpts) {
        var editor = Ext.getCmp(component.id);
        var toolbar = Ext.getCmp(editor.getToolbar().id);
        //添加按钮
        toolbar.add({
            iconCls: 'Plugin_Image',
            handler: this.selectImage,
            scope: this,
            tip: {
                title: this.langTitle
            },
            overflowText: this.langTitle
        });
    },
    //交验url
    isUrl: function (urlString) {
        regExp = /(http[s]?|ftp):\/\/[^\/\.]+?\..+\w$/i;
        if (urlString.match(regExp))
            return true;
        else
            return false;
    },
    //选择图片
    selectImage: function () {
        var me = this;
        if (!this.imgWindow) {
            this.imgWindow = new Ext.Window({
                title: this.langTitle,
                id: 'imgWindow',
                closeAction: 'hide',
                modal: true,
                width: 400,
                height: 160,
                layout: 'fit',
                items: [new Ext.TabPanel({
                    border: false,
                    enableTabScroll: true,
                    activeTab: 0,
                    height: 160,
                    items: [{
                        title: '<span class="commoncss">上传本地图片</span> ',
                        items: [{
                            xtype: 'form',
                            itemId: 'upload-img',
                            id: 'upload-img',
                            fileUpload: true,
                            border: false,
                            plain: true,
                            bodyStyle: 'padding: 10px;',
                            labelWidth: 60,
                            labelAlign: 'right',
                            items: [{
                                xtype: 'fileuploadfield',
                                fieldLabel: '选择文件',
                                name: 'imageFile',
                                anchor: '100%',
                                allowBlank: false,
                                emptyText: '请选择图片(大小不能超过100KB)'
                            }, {
                                xtype: 'textfield',
                                fieldLabel: '图片说明',
                                name: 'up_name',
                                maxLength: 100,
                                anchor: '100%',
                                emptyText: '简短的图片说明'
                            }]
                        }],
                        buttons: [{
                            text: '插入',
                            iconCls: 'acceptIcon',
                            id: 'btnUploadInset',
                            handler: function () {
                                var frm = Ext.getCmp('upload-img').getForm();
                                if (!frm.isValid()) {
                                    return;
                                }
                                if (frm.isValid()) {
                                    var imageFile = frm.findField('imageFile').getValue();
                                    var point = imageFile.lastIndexOf(".");
                                    var type = imageFile.substr(point);
                                    if (type == ".jpg" || type == ".gif" || type == ".JPG" || type == ".GIF") {
                                    } else {
                                        Ext.MessageBox.alert('提示', '只支持上传jpg和gif格式的图片文件');
                                        return;
                                    }
                                    frm.submit({
                                        url: me.url,
                                        waitTitle: '提示',
                                        method: 'POST',
                                        waitMsg: '正在上传文件,请稍候...',
                                        success: function (form, action) {
                                            var aUrl = action.result.aUrl;
                                            if (action.result.state == 'error') {
                                                Ext.MessageBox.alert('提示',action.result.msg);
                                                return;
                                            }
                                            var img = {
                                                Url: aUrl,
                                                Title: frm.findField('up_name').getValue()
                                            };
                                            this.insertImage(img);
                                        },
                                        failure: function (response) {
                                            Ext.MessageBox.alert('提示', '文件上传失败');
                                        },
                                        scope: this
                                    });
                                    Ext.getCmp('imgWindow').hide();
                                } else {
                                    if (!frm.findField('imageFile').isValid()) {
                                    }
                                }
                            },
                            scope: this
                        }, {
                            text: '取消',
                            id: 'btnUploadCancel',
                            iconCls: 'deleteIcon',
                            handler: function () {
                                Ext.getCmp('imgWindow').hide();
                            },
                            scope: this
                        }]
                    }, {
                        title: '<span class="commoncss">链接网络图片</span> ',
                        items: [{
                            xtype: 'form',
                            itemId: 'insert-img',
                            id: 'insert-img',
                            border: false,
                            plain: true,
                            bodyStyle: 'padding: 10px;',
                            labelWidth: 60,
                            labelAlign: 'right',
                            items: [{
                                xtype: 'textfield',
                                fieldLabel: '图片URL',
                                name: 'url',
                                anchor: '100%',
                                allowBlank: false,
                                emptyText: '请填入支持外链的长期有效的图片URL'
                            }, {
                                xtype: 'textfield',
                                fieldLabel: '图片说明',
                                name: 'name',
                                maxLength: 100,
                                anchor: '100%',
                                emptyText: '简短的图片说明'
                            }]
                        }],
                        buttons: [{
                            text: '插入',
                            iconCls: 'acceptIcon',
                            id: 'btnLinkInset',
                            handler: function () {
                                var frm = Ext.getCmp('insert-img').getForm();
                                if (frm.isValid()) {
                                    url = frm.findField('url').getValue();

                                    if (!this.isUrl(url)) {
                                        Ext.Msg.alert('提示','URL不合法.请重新输入.格式[http://****]');
                                        return;
                                    };

                                    var img = {
                                        // Width : 100,
                                        // Height : 100,
                                        Url: frm.findField('url').getValue(),
                                        ID: 'id_img_9999',
                                        Title: frm.findField('name').getValue()
                                    };
                                    this.insertImage(img);
                                    this.imgWindow.hide();
                                } else {
                                    if (!frm.findField('url').isValid()) {
                                    }
                                }
                            },
                            scope: this
                        }, {
                            text: '取消',
                            id: 'btnLinkCancel',
                            iconCls: 'deleteIcon',
                            handler: function () {
                                Ext.getCmp('imgWindow').hide();
                            },
                            scope: this
                        }]
                    }]
                })],
                listeners: {
                    show: {
                        fn: function () {
                            var frm = Ext.getCmp('insert-img').getForm();
                            frm.reset();
                            var frm1 = Ext.getCmp('upload-img').getForm();
                            frm1.reset();
                        },
                        scope: this,
                        defer: 350
                    }
                }
            });
            this.imgWindow.show();
        } else {
            this.imgWindow.show();
        }
    },
    //插入图片
    insertImage: function (img) {
        this.cmp.insertAtCursor('<img src="' + img.Url + '" title="' + img.Name + '" alt="' + img.Name + '">');
    }
});

调用代码:

    <script type="text/javascript" src="/Scripts/HtmlEditorPlugins/TKW.Editor.Plugin.Image.js"></script>
    <script type="text/javascript">
        Ext.onReady(function () {
            Ext.create('Ext.container.Viewport', {
                layout: 'fit',
                renderTo: Ext.getBody(),
                items: [
                    Ext.create('Ext.form.field.HtmlEditor', {
                        
                        plugins: [
                            Ext.create('TKW.Editor.Plugin.Image', { url: '/Image/Upload' })
                        ]
                    })
                ]
            });

        });
    </script>

服务器接收代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace ExtjsField.Controllers
{
    public class ImageController : Controller
    {
        //
        // GET: /image/
        [AcceptVerbs(HttpVerbs.Post)]
        public string Upload()
        {
            var file = Request.Files["imageFile"];
            string fileName = DateTime.Now.ToString("yyyyMMddhhmmss") + Path.GetExtension(file.FileName);
            file.SaveAs(Server.MapPath("~/Upload/" + fileName));//保存到服务器磁盘路径
            string returnStr = "{\"success\":true,\"aUrl\":\"/Upload/" + fileName + "\"}";//返回网络路径
            return returnStr;
        }

    }
}

代码运行结果:

参考文献:

http://eredg4.iteye.com/blog/1047795

http://web230531.host89.chinajsp.net/login.ered?reqCode=init


 

ExtJS 3.4 中实现批量图片上传可以通过以下步骤: 1. 创建一个文件上传表单 可以使用 Ext.form.Panel 组件创建一个包含文件上传字段的表单,例如: ``` var formPanel = new Ext.form.Panel({ renderTo: 'upload-form', fileUpload: true, items: [{ xtype: 'filefield', name: 'image', fieldLabel: 'Select an image', labelWidth: 100, allowBlank: false, buttonText: 'Browse...' }] }); ``` 2. 处理上传请求 在表单提交时,需要处理上传请求并将文件发送到服务器。可以使用 Ext.form.action.Submit 类来处理请求,例如: ``` formPanel.getForm().submit({ url: 'upload.php', // 上传文件的服务器端处理脚本 waitMsg: 'Uploading your image...', success: function(form, action) { Ext.Msg.alert('Success', 'Your image was uploaded successfully.'); }, failure: function(form, action) { Ext.Msg.alert('Failed', action.result.msg); } }); ``` 其中,url 参数为上传文件的服务器端处理脚本地址,waitMsg 参数为上传过程中显示的等待消息,success 和 failure 分别为上传成功和失败时的回调函数。 3. 处理上传文件 在服务器端处理上传文件时,可以使用 PHP、Java、Node.js 等语言和框架来实现。以下是一个 PHP 的示例代码: ``` <?php $uploadDir = 'uploads/'; $uploadFile = $uploadDir . basename($_FILES['image']['name']); if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadFile)) { echo json_encode(array('success' => true)); } else { echo json_encode(array('success' => false, 'msg' => 'Failed to upload image.')); } ?> ``` 其中,$uploadDir 为上传文件保存的目录,$uploadFile 为上传文件的完整路径。move_uploaded_file 函数用于将上传的临时文件移动到目标位置。最后,使用 json_encode 函数将上传结果以 JSON 格式返回给客户端。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值