经常做系统的时候会遇到上传组件,特别是大文件的时候总是很郁闷,长时间无响应导致糟糕的用户体验,所以决定采用swfupload来支持文件上传。

大体代码如下。

var upload = {};
upload.UploadPanel = function (cfg) {
    this.iconCls = 'add';
    this.text = 'upload';
    Ext.apply(this, cfg);
    this.setting = {
        upload_url: this.uploadUrl,
        flash_url: this.flashUrl || '../../../../Scripts/Platform/Upload/swfupload.swf',
        file_size_limit: this.fileSize || (1024 * 50),
        file_post_name: this.filePostName,
        file_types: this.fileTypes || "*.*",
        file_types_description: "All Files",
        file_upload_limit: "5",
        //file_queue_limit : "10",
        post_params: this.postParams || { savePath: 'upload\\' },
        use_query_string: true,
        debug: false,
        button_cursor: SWFUpload.CURSOR.HAND,
        button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
        button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
        button_action: SWFUpload.BUTTON_ACTION.SELECT_FILE,
        custom_settings: {
            scope_handler: this
        },
        file_queued_handler: this.filequeuedhandler,
        file_queue_error_handler: this.filequeueerrorhandler,
        file_dialog_complete_handler: this.filedialogcomplete_handler,
        upload_start_handler: this.uploadstarthandler,
        upload_progress_handler: this.onUploadProgress,
        upload_error_handler: this.uploaderrorhandler,
        upload_success_handler: this.onUploadSuccess,
        upload_complete_handler: this.uploadcompletehandler,
        queue_complete_handler: this.queuecompletehandler
    };
    upload.UploadPanel.superclass.constructor.call(this, {
        listeners: {
            'afterrender': function (e) {
                var em = e.btnEl.parent('em');

                var placeHolderId = Ext.id();
                em.setStyle({
                    position: 'relative',
                    display: 'block'
                });
                em.createChild({
                    tag: 'div',
                    id: placeHolderId
                });

                this.swfupload = new SWFUpload(Ext.apply(this.setting, {
                    button_width: em.getWidth(),
                    button_height: em.getHeight(),
                    button_placeholder_id: placeHolderId
                }));
                this.swfupload.uploadStopped = false;
                Ext.get(this.swfupload.movieName).setStyle({
                    position: 'absolute',
                    top: 0,
                    left: -2
                });
            },
            scope: this,
            delay: 100
        }
    });
}
Ext.extend(upload.UploadPanel, Ext.Button, {
    filequeuedhandler: function () {
        this.startUpload();
    },
    filequeueerrorhandler: function () {

    },
    filedialogcomplete_handler: function () {

    },
    uploadstarthandler: function () {

    },
    onUploadProgress: function (file, bytesComplete, totalBytes) {

    },
    uploaderrorhandler: function () {

    },
    onUploadSuccess: function () {

    },
    uploadcompletehandler: function () {

    },
    queuecompletehandler: function () {

    }
});
Ext.reg('btnupload', upload.UploadPanel);

于是调用的时候就很easy了。

new Ext.Window({
            width: 650,
            title: 'UPLOAD',
            height: 300,

            tbar: [
            { xtype: 'btnupload',
                text: '上传',
                fileSize: 1024 * 50,
                uploadUrl: 'SaveFile',
                filePostName: 'file',
                fileTypes: '*.jpg;*.gif;*.png;*.jpeg',
                postParams: { savePath: 'upload\\' },
                onUploadSuccess: function (s, f) {
                    console.log(f);
                },
                onUploadProgress: function (file, bytesComplete, totalBytes) {
                    var percent = Math.ceil((bytesComplete / totalBytes) * 100);
                    percent = percent == 100 ? 100 : percent;
                    console.log(percent);
                }
            }],
            items:
            [

            ]
        }).show();

这样需要上传的时候就很轻松了。

ext 3.x 让uploadPanel支持swfupload的更多相关文章

  1. 【翻译】Ext JS 5的平板支持

    原文:Ext JS 5 Tablet Support Ext JS已被公认为桌面Web应用程序的领先框架.自从平板开始在全球挑战PC的销售,无论是个人还是企业,电脑横向的应用已经产生急剧的变化.Sen ...

  2. [转载]ExtJs4 笔记(3) Ext.Ajax 对ajax的支持

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)     本篇主要介绍一下ExtJs常用的几个对JS语法的扩展支持,包括Ajax封装,函数事 ...

  3. ExtJs4 笔记(3) Ext.Ajax 对ajax的支持

    本篇主要介绍一下ExtJs常用的几个对JS语法的扩展支持,包括Ajax封装,函数事件操作封装,还有扩展的常用函数等.Ajax服务端交互式操作是提交到.NET MVC.后续服务端交互都采用这一方式实现. ...

  4. 12. Ext.Ajax 对ajax的支持

    转自:http://www.cnblogs.com/lipan/archive/2011/12/09/2272793.html 本篇主要介绍一下ExtJs常用的几个对JS语法的扩展支持,包括Ajax封 ...

  5. Ext JS - 问答

    Ext JS - 问答 在下面你将可以找到关于Ext JS 的最常见问题的答复.如果没有找到您所需的答复,请访问 Ext JS 论坛或者提交一个支持申请. 如果你确信你的问题可以对本页有补充,请让我们 ...

  6. SWFUpload简介及中文参考手册(share)

    SWFUpload SWFUpload 版本 2 概览 (Overview) 入门( Getting Started) js对象 (SWFUpload JavaScript Object) 构造器(C ...

  7. [转]使用Sencha Ext JS 6打造通用应用程序

    原文地址:http://www.uedsc.com/using-sencha-ext-js-6-to-build-universal-apps.html 在Sencha和整个Ext JS团队的支持下, ...

  8. SWFUpload 2.5.0版 官方说明文档 中文翻译版

    原文地址:http://www.cnblogs.com/youring2/archive/2012/07/13/2590010.html#setFileUploadLimit SWFUpload v2 ...

  9. 【Ext.Net学习笔记】06:Ext.Net GridPanel的用法(GridPanel 折叠/展开行、GridPanel Selection、 可编辑的GridPanel)

    GridPanel 折叠/展开行 Ext.Net GridPanel的行支持折叠/展开功能,这个功能个人觉得还说很有用处的,尤其是数据中包含图片等内容的时候. 下面来看看效果: 使用行折叠/展开功能之 ...

随机推荐

  1. java web图片显示到浏览器

    今天研究了一下午,图片显示问题. jsp中获取绝对路径的方法:String contextPath = request.getContextPath();String path = request.g ...

  2. CSS扇形展开效果

    知识点预备: [1]CSS3中特别重要的transform中的rotate(),现在transform可以将元素进行2D和3D变形. 2D transform常用的transform-function ...

  3. atitit.web原理 理论attilax总结

    atitit.web原理 理论attilax总结 1. Web3.01 2. Web的未来趋势1 3. Web语言与应用导论_百度百科.html2 4. <Web设计与编程导论(影印版)> ...

  4. paip.获取地理位置根据Ip

    paip.获取地理位置根据Ip html转换txt 正则表达式截取mid 作者Attilax  艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...

  5. React+BootStrap+ASP.NET MVC实现自适应和组件的复用

    系统展示如下 1.前端采用bootstrap3进行架构 2.后端采用asp.net mvc进行开发 开发工具vs2010 mvc4需要安装sp1的补丁. 3.js组件的封装采用react 1.新建mv ...

  6. 转:RTMPdump使用相关

    在FFMPEG中使用libRTMP的经验 FFMPEG在编译的时候可以选择支持RTMP的类库libRTMP.这样ffmpeg就可以支持rtmp://, rtmpt://, rtmpe://, rtmp ...

  7. iOS10 相机相册等权限的使用、检测并引导用户开启权限

    <!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问 ...

  8. VS SuppressMessage忽略特定方法的警告信息

    VS在编译源码的时候有很多警告信息,有些时候 我们需要忽略一个特定方法的特定警告信息,于是就用SuppressMessage特性,可是这个特性的参数不太好搞定,还好有VS,Suppressing Co ...

  9. Spring3 整合MyBatis3 配置多数据源 动态选择SqlSessionFactory

    一.摘要 上两篇文章分别介绍了Spring3.3 整合 Hibernate3.MyBatis3.2 配置多数据源/动态切换数据源 方法 和 Spring3 整合Hibernate3.5 动态切换Ses ...

  10. Windows7下面exe寄宿WCF:Http无法注册URL{0} ,进程不具有此命名空间的访问权限问题

    运行寄宿exe程序的时候通过run as administrator来启动就OK了.