Extjs 使用fileupload插件上传文件 带进度条显示

一.首先我们看看官方给出的插件的解释:

一个文件上传表单项具有自定义的样式,并且可以控制按钮的文本和 像文本表单的空文本类似的其他特性。 它使用一个隐藏的文件输入元素,并在用户选择文件后 在form提交的同时执行实际的文件上传。

因为没有安全的跨浏览器以编程的方式对file表单项设值的方式, 所以标准表单项的 setValue 方法是无效的。 getvalue方法的返回值取决于使用何种浏览器; 一些仅仅返回文件名, 一些返回一个完整的文件路径, 一些则返回文件的虚拟路径。

二.在我看来这个插件就是在使用Ext的时候需要用到上传文件时的最好选择,能够做出效果,实现功能就是王道。

三.下面我们就看看实际运用的代码,我会在在难懂的地方做出解释,希望对大家的理解有所帮助。

uploadEvent:function(){ //自定义点击“上传”时触发的事件。
        var me =this;
        var uploadArea = Ext.create(‘Ext.form.Panel‘, {
            title : ‘‘,
            width : 350,height:105,
            bodyPadding : 10,
            margin:‘-15 0 0 -20‘,
            frame : false,
            fileUpload: true,
            items : [{
                xtype : ‘filefield‘,
                name : ‘file‘,
                id:‘fileinput‘,
                margin:‘5 0 0 0‘,
                fieldLabel : ‘文件路径‘,
                labelWidth : 60,
                msgTarget : ‘side‘,
                allowBlank : false,
                anchor : ‘100%‘,
                buttonText : ‘请选择文件‘
            }],

            buttons : [{
                text : ‘上传‘,margin:‘0 10 25 0‘,
                handler : function() {
                    var url = me.getUrl(‘flow_check/flow_new‘);
                    var form = uploadArea.getForm();
                    Ext.MessageBox.show({   //显示上传的提示信息的窗口,有了此方法,下面的Ext.MessageBox.updateProgress函数才能使用
                       title: ‘请稍等‘,
                       msg: ‘正在上传...‘,
                       progressText: ‘‘,
                       width:300,
                       progress:true,   //这个也是和Ext.MessageBox.updateProgress函数想对应的,必须设置为true
                       closable:false,
                       animEl: ‘loding‘
                     });

                     var updateProgress = function (progress) {
                       if (progress >= 1) {
                            Ext.MessageBox.updateProgress(1, "处理完成");
                            return;
                       }

                       Ext.MessageBox.updateProgress(progress,         Math.round(progress * 100) + "%");//动态在进度条显示百分比
                       Ext.defer(function () {//延迟500毫秒执行一次下面的函数。
                            updateProgress(progress + 0.1);
                       }, 500);
                     }

                    form.submit({//表单提交,ajax请求,配置上传成功与失败的函数事件。
                        url: url,
                        method: ‘POST‘,
                        success: function(f,a) {
                            var result = Ext.JSON.decode(a.response.responseText);
                            if(result.success == true){
                                me.fileName = result.data.filename;
                                me.fileUrl = result.data.url;
                                Ext.getCmp(‘uploadWindow‘).destroy();
                                Ext.getCmp(‘txt_filename‘).setText(me.fileName);
                            }
                            Ext.MessageBox.alert("提示:",result.msg);
                        },
                        error: function() {

                        }
                    });
                }
            }]
        });

        Ext.create(‘Ext.Window‘, {//创建弹出的窗口,items设置为上面定义的uploadArea。
            title: ‘上传文件‘,
            id:‘uploadWindow‘,
            width:350,
            height:140,
            autoShow: true,
            modal: true,
            y: 200,
            bodyCls: ‘um-create-form‘,
            items: uploadArea,
            animateTarget: event.target
        });
    }    

这样就能够实现一个带进度条的extjs上传文件的控件了。

效果图如下图所示:

教程完了,大家还有什么不懂的,可以继续提问。希望对大家有帮助。谢谢支持!

时间: 2025-01-08 19:18:55

Extjs 使用fileupload插件上传文件 带进度条显示的相关文章

asp.net mvc 实现上传文件带进度条

思路:ajax异步上传文件,且开始上传文件的时候启动轮询来实时获取文件上传进度.保存进度我采用的是memcached缓存,因为项目其他地方也用了的,所以就直接用这个啦.注意:不能使用session来保存进度,因为session是线程安全的不能实时获取进度,可是试试httpcache或者memorycache,这两个我没有试过,请自行尝试. ps:使用websocket来实现也是不错的,不过我没有试过,有心的大神可以去试试. 下面贴一张效果图: 前端ajax上传文件,我使用了两种jq插件.一种是a

ajax上传文件带进度条的思路

首先,需要2个重要的数据,total(文件总大小)和loaded(已经上传的大小),用 loaded/total,然后不断的更新进度条即可: 问:怎么拿到这两个重要数据呢? 答:在html5中有一个上传过程事件onprogress,在这个事件中可以读到这两个数据loaded和total:上传的时候不断的触发这个函数,然后更新进度条即可: 1 xhr.upload.onprogress = function(ev){ 2 if(ev.lengthComputable){ 3 //有可能文件时分块上

ajaxSubmit() 上传文件和进度条显示

1.  首先引用js文件 <script type="text/javascript" src="/js/jquery/jquery.form.js"></script> //ajaxForm 依赖脚本 <script type="text/javascript" src="/js/jquery/jquery-1.8.0.min.js"></script> 2.  form 表单

asp.net 文件批量选取,批量上传,带进度条,uploadify3.2 TOP

http://www.16aspx.com/Article/3444 asp.net 文件批量选取,批量上传,带进度条,uploadify3.2 TOP,布布扣,bubuko.com

servlet多文件上传(带进度条)

需要commons-fileupload-1.3.jar和commons-io-2.4.jar的支持 页面效果:(图片文件都可以) (1)进度标识类 public class UploadStatus { private long bytesRead; private long contentLength; private int items; private long startTime = System.currentTimeMillis(); //set get 方法 省略 } (2)监听

XMLHttpRequest上传文件实现进度条

话不多说,直接上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>XMLHttpRequest上传文件进度实现</title> <script type="text/javascript"> var xhr; var ot;// var oloaded; //上传文件方法 function UpladFil

vue项目上传文件以及进度条

最近做项目的时候,需要上传自定义镜像.并且附带进度条,上网查询一下资料,经过一番折磨,也总算做出来了,把自己写项目的内容给大家分享一下. 先直接贴代码吧 1.首先声明一个formData对象. 2.把需要上传的参数利用append追加进去. append('参数名','值') 第一个this.$refs.upload.files[0],其实就是input标签加上ref唯一关键字就是upload. var fd = new FormData(); fd.append('image', that.$

webuploader插件单个文件上传(带进度条)

@{ ViewBag.Title = "主页"; } <script src="~/Scripts/jquery-1.9.1.min.js"></script> <link href="~/Scripts/1/bootstrap.css" rel="stylesheet" /> <link href="~/Scripts/1/webuploader.css" rel

AJAX大文件切割上传以及带进度条。

分块传输的原理就是利用HTML5新增的文件slice截取函数. 代码如下: html: <input id="f" type="file" name="part" onchange="writeFile()"> JS: 核心部分已经加粗显示了,其他部分不用看,因为实现的方式有很多种,不一定要按照我的方式去写,但是核心是不会变的. var writeFile = function(){ var temp = null