2013-01-21 60 views
3

我在ExtJS4中看到了表单文件上传的例子,我需要自定义文件上传的进度。Extjs文件上传进度

我看到waitMsg配置属性,但我不想使用它,我不想使用extjs第三方插件。

那么,我怎样才能简单地从上传表单在extjs上传进度?

回答

3

waitMsg使用带有无限自动更新进度栏的消息框。所以你不能只创建一个显示当前上传的进度条。

您可以创建自己的Ext.ProgressBar估计值上传时间和完成时间将其设置为最大值。但我想你不想那样。

回答你的问题:你不能只是跟踪当前的上传进度。


如果您确实需要此用户体验,您可以尝试3rd party component


引述文档:使用正常的“Ajax”的技术,不进行

文件上传,这是他们没有使用XMLHttpRequest的执行 。而是以标准方式提交的格式为 ,DOM元素 被临时修改为其目标集被设置为指的是生成的,隐藏的,其被插入到文档中,但在收集返回数据之后删除 。

+0

我想extjs处理文件PUT请求和xhr必须返回字节发送...不是? – xercool

+0

http://stackoverflow.com/questions/76976/how-to-get-progress-from-xmlhttprequest关于这里讨论的XHR的这个问题。我怎样才能从extjs获得请求xhr对象? – xercool

+0

so .. that's bad(。谢谢 – xercool

0
buttons: [{ 
    text: 'Upload', 
    handler: function() { 
     var form = this.up('form').getForm(); 
     if (form.isValid()) { 
      form.submit({ 
       url: '/upload/file', 
       waitMsg: 'Uploading your file...', 
       success: function (f, a) { 
        var result = a.result, 
         data = result.data, 
         name = data.name, 
         size = data.size, 
         message = Ext.String.format('<b>Message:</b> {0}<br>' + 
          '<b>FileName:</b> {1}<br>' + 
          '<b>FileSize:</b> {2} bytes', 
          result.msg, name, size); 

        Ext.Msg.alert('Success', message); 
       }, 
       failure: function (f, a) { 
        Ext.Msg.alert('Failure', a.result.msg); 
       } 
      }); 
     } 
    } 
}] 

现场演示,进度窗口是here

0

为了展示真正的进展,你可以使用onprogress的XMLHttpRequest的回调:

Ext.override(Ext.data.request.Ajax, { 
    openRequest: function (options) { 
     var xhr = this.callParent(arguments); 
     if (options.progress) { 
      xhr.upload.onprogress = options.progress; 
     } 
     return xhr; 
    } 
}); 

然后使用喜欢这里:

Ext.Ajax.request({ 
    url: '/upload/files', 
    rawData: data, 
    headers: { 'Content-Type': null }, //to use content type of FormData 
    progress: function (e) { 
     console.log('progress', e.loaded/e.total); 
    } 
}); 

查看在线演示here