Ext 多文件上传面板扩展

扩展了  Ext.Panel ,加入文件框列表 ,并控制删除 ,ie预览图片等功能 ,提交后,向服务器递交 ,文件编号列表

 

 

 

 

 

 

 

if (!yiminghe)
 var yiminghe = {};
yiminghe.multiFileUploadField = Ext.extend(Ext.Panel, {
    layout: 'fit',
    //文件编号Id的前缀
    startId: 'multi_file_up',
    //最多上传文件数目
    limit: 3,
    initComponent: function() {
        //文件编号Name的前缀,用于向服务器提交
        if (!this.startName)
        this.startName = this.startId;
        this.items = {
            xtype: 'hidden',
            value: '',
            name: this.startName + '_count',
            id: this.startId + '_count'
        };
        yiminghe.multiFileUploadField.superclass.initComponent.call(this);
        this.num = 0;
    },
    // private
    onRender: function(ct, position) {

        yiminghe.multiFileUploadField.superclass.onRender.call(this, ct, position);

    },

    //删除面板的全部文件框
    delAll: function() {
        var files = Ext.getCmp(this.startId + '_count').getValue();
        //alert('|' + files + '|');
        var items = files.split(' ');
        for (var i = 0; i < items.length; i++) {
            //alert(items[i]);
            if (items[i]) {
                this.remove(this.startId + '_column_' + items[i]);
                if (Ext.isIE) {
                    this.remove(this.startId + '_previewpanel_' + items[i]);
                }
            }
        }
        this.num = 0;
        Ext.getCmp(this.startId + '_count').setValue('');
    },
    //面板中是否有文件
    isEmpty: function() {
        var files = Ext.getCmp(this.startId + '_count').getValue();
        return files.trim() == '';
    },
    //向面板中加入文本框
    addFile: function() {

        var files = Ext.getCmp(this.startId + '_count').getValue().trim();
        if (files.split(' ').length >= this.limit) {
            alert('最多能上传 ' + this.limit + ' 个文件!');
            return;
        }
        this.num++;
        var curNum = this.num;
        Ext.getCmp(this.startId + '_count').setValue(Ext.getCmp(this.startId + '_count').getValue() + " " + curNum);
        var fileConfig = {};
        for (var p in this.fileConfig) {
            fileConfig[p] = this.fileConfig[p];
        }
        fileConfig.id = this.startId + '_file_' + curNum;
        fileConfig.name = this.startName + '_file_' + curNum;
        var startId = this.startId;
        fileConfig.listeners = {
            'fileselected': function(c, v) {
                Ext.getCmp(startId + '_title_' + curNum).setValue(yiminghe.multiFileUploadField.getFileName(v));
                if (Ext.isIE) {
                    yiminghe.multiFileUploadField.preview(v, startId + '_previewpanel_' + curNum, startId + '_previewdiv_' + curNum);
                }
            }
        };
        var n = this.add({
            layout: 'column',
            autoHeight: true,
            id: this.startId + '_column_' + curNum,
            items: [
            {
                columnWidth: .5,
                layout: 'form',
                labelWidth: this.labelWidth,
                items: [{
                    xtype: 'textfield',
                    fieldLabel: '文件名称',
                    id: this.startId + '_title_' + curNum,
                    anchor: '95%',
                    name: this.startName + '_title_' + curNum
                }]
            },
            {
                columnWidth: .3,
                layout: 'form',
                labelWidth: this.labelWidth,
                items: [fileConfig]
            },
            {
                columnWidth: .2,
                layout: 'form',

                items: [{
                    xtype: 'button',
                    text: '清除',
                    handler: function() {
                        this.remove(n);
                        if (Ext.isIE) {
                            this.remove(Ext.getCmp(this.startId + '_previewpanel_' + curNum));
                        }
                        Ext.getCmp(this.startId + '_count').setValue(Ext.getCmp(this.startId + '_count').getValue().replace(' ' + curNum, ''));
                    },
                    scope: this
                }]
            }

            ]
        });
        if (Ext.isIE) {
            this.add({
                xtype: 'panel',
                html: '<div id="' + this.startId + '_previewdiv_' + curNum + '" ext:qtip="TODO" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader( sizingMethod = scale );">' +
                '</div><br><br>',
                title: '图片预览',
                collapsible: true,
                hidden: true,
                id: this.startId + '_previewpanel_' + curNum

            });
        }
        this.doLayout();
    },
    afterRender: function() {
        yiminghe.multiFileUploadField.superclass.afterRender.call(this);
    }
});

yiminghe.multiFileUploadField.getFileName = function(file)
 {
    var i = file.lastIndexOf("/");
    if (i == -1){
        i = file.lastIndexOf("\\");
    }
    var name = file;
    if (i != -1){
        name = file.substring(i + 1, file.length);
    }
    var j = name.lastIndexOf(".");
    if (j != -1){
        return name.substring(0, j);
    }else{
        return name;
    }
}

yiminghe.multiFileUploadField.getFileExt = function(file)
 {
    var i = file.lastIndexOf(".");
    if (i == -1){
        return "";
    }
    var t = file.substring(i + 1, file.length);
    var j = t.lastIndexOf("/");
    if (j == -1){
        j = t.lastIndexOf("\\");
        if (j == -1){
            return t;
        }
    }
    return "";
}

yiminghe.multiFileUploadField.preview = function(fname, panel, div) {
    var fext = yiminghe.multiFileUploadField.getFileExt(fname).toLowerCase();
    if (fext == "gif" || fext == "bmp" || fext == "jpg" || fext == "jpeg" ||
    fext == "png") {
        Ext.getCmp(panel).body.hide();
        var newPreview = document.getElementById(div);
        newPreview.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = fname;
        newPreview.style.width = "400px";
        newPreview.style.height = "300px";
        Ext.getCmp(panel).show();
        Ext.getCmp(panel).body.slideIn('l', {
            stopFx: true,
            duration: .2
        });
    } else {
        Ext.getCmp(panel).hide();
    }
}
Ext.reg('multifileupload', yiminghe.multiFileUploadField);
 

 

 

外部调用:  使用了 Ext 例子 自带的 fileuploadfield 组件

 

var fileConfig = {
    xtype: 'fileuploadfield',
    emptyText: '选择文件上传',
    fieldLabel: '上传文件',
    anchor: '95%',
    listeners: {
        'fileselected': function(c, v) {
         }
    },
    buttonCfg: {
        text: '',
        iconCls: 'upload-icon'
    }
};

var eform = new Ext.FormPanel({
    labelAlign: 'left',
    frame: true,
    animCollapse: true,
    fileUpload: true,
    labelWidth: 70,
    method: 'POST',
    id: 'resolveBug_form',
    defaults: {
        anchor: '95%',
        msgTarget: 'side'
    },
    items: [
    {
        xtype: 'multifileupload',
        fileConfig: fileConfig,
        id: 'multi_test_resolve',
        startId: 'resolveBug_files',
        startName: 'editBug_files',
        labelWidth: 70,
        limit: 3
    }],
    listeners: {
        beforeaction: function() {
            if (!window.fileProgressPanel) {
                window.fileProgressPanel = new yiminghe.fileProgressPanel();
            }
            if (!Ext.getCmp('multi_test_resolve').isEmpty())
            window.fileProgressPanel.start();
            else
            Ext.MessageBox.wait('正在提交');
        },
        actioncomplete: function() {
            if (!Ext.getCmp('multi_test_resolve').isEmpty()) {
                window.fileProgressPanel.stop();
                Ext.getCmp('multi_test_resolve').delAll();
            }
            else
            Ext.MessageBox.hide();
            eform.form.reset();

        },
        actionfailed: function() {
            if (!Ext.getCmp('multi_test_resolve').isEmpty())
            window.fileProgressPanel.stop();
            else
            Ext.MessageBox.hide();
        }
    },
    buttons: [{
        text: '添加文件',
        handler: function() {

            Ext.getCmp('multi_test_resolve').addFile();
        }
    },
    {
        text: '确定',
        handler: function() {
            if (eform.form.isValid()) {

                eform.form.submit({
                    url: 'bug/BtsSetBugDO_ext.jsp',
                    success: function(form, action) {
                        //Ext.Msg.alert('成功', '修改成功!');
                        window.grid.reload();
                        if (window.grid2 && window.w_bug.isVisible()){
                            window.grid2.reload();
                        }
                    },
                    failure: function(form, action) {
                        Ext.Msg.alert('失败', action.result.data.info);
                    }
                    // waitMsg : '正在保存数据,稍后...'
                });
                window.resolve_bug.hide();
            } else {
                // Ext.Msg.alert('信息', '请填写完成再提交!');
                }
        }
    }]
});
 

关于 fileProgressPanel 详见

Ext 实现 文件上传 进度显示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值