- 浏览: 184826 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
yu505656166:
这个问题是怎么解决的啊?
spring mail 发送邮件,没有主题,没有收件人,显示乱码问题 -
dextersmake:
我的配置和你的差不多,调了有一些效果,但是还不是很满意。
YARN内存使用优化配置 -
kjkhi:
dxb350352 写道怎么用啊,运行完了也不知道取值的方法 ...
Apache POI组件使用eventusermodel模式读取Excel文档内容 -
dxb350352:
怎么用啊,运行完了也不知道取值的方法
Apache POI组件使用eventusermodel模式读取Excel文档内容 -
wanshijian:
相同问题,解决了!
使用cxf的wsdl2java是遇到的问题
之前找了很多关于更新文件上传进度条的资料,其大部分都是不断向后台获取数据实现更新的!
现在,我们使用commons-fileupload结合XMLHttpRequest实现,客户端Ajax更新上传进度,免去不断向服务器端获取数据,而影响效率。
这里使用Ext.MessageBox,实现最终效果
首先是通过使用Extjs官方提供的Ext.ux.form.FileUploadField结合commons-fileupload实现文件上传,我以前做了一篇关于实现这个功能的详细说明,这里就重复。如有需要,请看http://jayklin.iteye.com/blog/841602
在这一篇中,主要想探讨一下如何commons-fileupload和XMLHttpRequest协同工作,实现上传进度显示。
据我所知,XMLHttpRequest.send()方法只能向服务端发送文本信息,而对于二进制文件,需要做编码处理(没有深入研究!)。所以,如果直接用这个方法实现上传,可能需要的工作量会很大。但我们可以利用它实现客户端的上传进度条的更新!
在XMLHttpRequest中,有个onreadystatechange事件句柄。每次 readyState 属性改变的时候调用的事件句柄函数。当 readyState 为 3 时,它也可能调用多次。ps:readyState有5个状态:
所以可以利用当readyState=3时,多次调用onreadychange事件实现进度条更新。
而主要实现,请看代码:
上面是定义一个upload方法。当执行send()方法后,readyState变为3。发送文件过程中不断调用xhr.upload.onprogress
而在Ext.form.FormPanel的beforeaction这个事件响应的时候,执行以下代码:
以上便能实现在客户端更新上传文件进度。附件fileuploadprogress源文件。
现在,我们使用commons-fileupload结合XMLHttpRequest实现,客户端Ajax更新上传进度,免去不断向服务器端获取数据,而影响效率。
这里使用Ext.MessageBox,实现最终效果
首先是通过使用Extjs官方提供的Ext.ux.form.FileUploadField结合commons-fileupload实现文件上传,我以前做了一篇关于实现这个功能的详细说明,这里就重复。如有需要,请看http://jayklin.iteye.com/blog/841602
在这一篇中,主要想探讨一下如何commons-fileupload和XMLHttpRequest协同工作,实现上传进度显示。
据我所知,XMLHttpRequest.send()方法只能向服务端发送文本信息,而对于二进制文件,需要做编码处理(没有深入研究!)。所以,如果直接用这个方法实现上传,可能需要的工作量会很大。但我们可以利用它实现客户端的上传进度条的更新!
在XMLHttpRequest中,有个onreadystatechange事件句柄。每次 readyState 属性改变的时候调用的事件句柄函数。当 readyState 为 3 时,它也可能调用多次。ps:readyState有5个状态:
0 | Uninitialized | 初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置。 |
1 | Open | open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。 |
2 | Sent | Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。 |
3 | Receiving | 所有响应头部都已经接收到。响应体开始接收但未完成。 |
4 | Loaded | HTTP 响应已经完全接收。 |
所以可以利用当readyState=3时,多次调用onreadychange事件实现进度条更新。
而主要实现,请看代码:
upload: function(id, params){ var file = this._files[id], name = this.getName(id), size = this.getSize(id); if (!file){ throw new Error('file with passed id was not added, or already uploaded or cancelled'); } var xhr = this._xhrs[id] = new XMLHttpRequest(); var self = this; xhr.upload.onprogress = function(e){ if (e.lengthComputable){ self._options.onProgress(id, name, e.loaded, e.total); } }; xhr.onreadystatechange = function(){ // the request was aborted/cancelled if (!self._files[id]){ return; } if (xhr.readyState == 4){ self._options.onProgress(id, name, size, size); if (xhr.status == 200){ var response; try { response = eval("(" + xhr.responseText + ")"); } catch(err){ response = {}; } self._options.onComplete(id, name, response); } else { self._options.onComplete(id, name, {}); } self._files[id] = null; self._xhrs[id] = null; } }; // build query string var queryString = '?qqfile=' + encodeURIComponent(name); for (var key in params){ queryString += '&' + key + '=' + encodeURIComponent(params[key]); } xhr.open("POST", this._options.action + queryString, true); xhr.send(file); }
上面是定义一个upload方法。当执行send()方法后,readyState变为3。发送文件过程中不断调用xhr.upload.onprogress
而在Ext.form.FormPanel的beforeaction这个事件响应的时候,执行以下代码:
var xhrhandler = new uploadprogress.UploadHandlerXhr({ action: "do-nothing.htm", onProgress: function(id, fileName, loaded, total){ // is only called for xhr upload this._updateProgress(id, loaded, total); }, onComplete: function(id, fileName, result){ }, _updateProgress: function(id, loaded, total){ if(loaded == total){ Ext.MessageBox.hide(); }else{ var i = loaded/total; Ext.MessageBox.updateProgress(i, Math.round(100*i)+'% completed from '+uploadprogress.formatSize(total)); } } }); var id = xhrhandler.add(files[0]); xhrhandler.upload(id,{});
以上便能实现在客户端更新上传文件进度。附件fileuploadprogress源文件。
- fileuploadprogress.rar (1.4 KB)
- 下载次数: 213
发表评论
-
大数据处理--倒排索引
2014-06-28 14:08 4396简介 倒排索引源 ... -
大数据处理--BitSet
2014-06-28 11:01 1249java.util.BitSet可以按位存储。计算机中一个字 ... -
大数据处理--BloomFilter
2014-06-28 10:58 916BloomFilter——大规 ... -
hadoop 2.x升级异常
2014-06-19 11:54 22851、通过FileSystem这个API去访问hdfs上面的 ... -
Windows 编译Hadoop的Eclipse插件
2013-07-24 00:53 0http://www.cnblogs.com/fly ... -
log4j指定配置文件路径
2013-07-09 11:15 1933在默认情况下 log4j 会从WEB-INF/cl ... -
使用CXF发布和调用webservice
2013-05-08 16:14 1402依赖的JAR cxf-2.2.10.jar je ... -
Filter、Servlet、Listener区别与联系
2013-04-10 17:41 4184J2EE开发中,经常会使用到Filter、Servlet、L ... -
Apache POI组件使用eventusermodel模式读取Excel文档内容
2013-03-18 17:39 9118package com.test; import ja ... -
CXF之JAX-WS(转)
2012-12-18 17:31 1986CXF详解二 CXF之JAX-WS JAX-WS规范是一组 ... -
分析tomcat假死现象的过程
2012-10-15 15:50 0前段时间在公司遇到一个tomcat运行一段时间后(半个月左右 ... -
spring mail 通过HTTP代理发送邮件
2012-09-24 16:22 6662spring框架中org.spr ... -
多线程实现发送邮件功能
2012-09-14 18:44 11187通过Internet发送邮件,可能会在网络传输上面使用较多的 ... -
使用Spring mail通过socks代理发送邮件
2012-09-14 18:25 7135Spring框架提供了JavaMailSender接口及其实 ... -
plupload 上传组件,后台用java实现
2012-09-06 17:21 11486Plupload 是一个Web浏览器上的界面友好的文件上传模 ... -
POI读取大数据量的Excel文件
2012-09-06 11:58 15054POI读取Excel文件有两种方式,一种是使用usermod ... -
UML类图
2012-08-02 16:35 2045UML类图关系大全 1、关联双向关联:C1-C2:指 ... -
使用cxf的wsdl2java是遇到的问题
2012-03-13 10:50 3902对与同一个wsdl文件,我尝试过使用axis2是可以正常转过来 ... -
spring mail 发送邮件,没有主题,没有收件人,显示乱码问题
2012-03-06 14:02 4696使用spring框架风中的javamail发送邮件,遇到了一些 ... -
J2EE使用ireport做导出PDF操作
2012-03-02 17:21 2695首先,在lib中,加入一下jar: jasperreport ...
相关推荐
"commons-fileupload-1.2.1 ajax上传(进度条)"这个主题涉及了两个核心技术:Apache Commons FileUpload库的使用以及通过AJAX实现的文件上传进度条功能。 Apache Commons FileUpload是一个Java库,专门设计用于...
在本文中,我们将深入探讨如何使用JavaScript(JS)结合Apache Commons FileUpload库来实现一个带进度条的文件上传功能,并支持批量上传。这个功能在现代Web应用中非常常见,能够提供用户友好的交互体验。 首先,...
总的来说,"Common-FileUpload带进度条文件上传"是一个旨在提升用户体验的功能,通过提供文件上传进度的可视化反馈,使用户在等待上传过程中有更明确的感知。在实际开发中,理解这些知识点并正确应用,可以确保文件...
本篇将讨论如何使用Apache Commons FileUpload 1.2.2库和jQuery的progressbar插件来实现这样的功能。 Apache Commons FileUpload是一个Java库,专门处理HTTP请求中的多部分形式数据,即通常用于上传文件的数据格式...
本篇文章将深入探讨如何在Java环境中,利用Apache Commons FileUpload库实现这样的功能。 Apache Commons FileUpload是一个强大的、可扩展的库,专门用于处理HTTP请求中的多部分数据,也就是我们常说的表单数据,...
`java+jquery`的文件上传技术结合了后端的Java服务器处理和前端的jQuery库来实现无刷新的用户体验,同时提供上传进度条,实时反馈文件上传状态。本文将详细讲解这个主题。 首先,让我们了解Java文件上传的基础。在...
本项目实例聚焦于实现一个高效、用户友好的文件上传功能,利用了Ajax异步技术,实现了进度条显示,增强了用户体验。以下是这个项目涉及到的关键知识点: 1. **Ajax异步文件上传**:传统的文件上传通常会刷新整个...
通过XMLHttpRequest的PUT或POST方法实现与服务器的通信,结合JavaScript监听上传进度,可以显示上传状态,提升用户体验。 4. **前端技术**:HTML5的`<input type="file">`元素配合JavaScript的File API,可以实现...
【标题】"上传下载仿163网盘无刷新文件上传 for Jsp-fileupload-jsp.zip" 提到的是一个基于JSP(Java Server Pages)的文件上传和下载功能实现,模仿了163网盘的无刷新技术。163网盘是知名的云存储服务,其无刷新...
本压缩包"javaWEB上传+进度条代码包.7z"包含了实现这一功能的相关代码示例,特别提到了使用AJAX技术来实现异步上传,以及一个视频教程。 1. **JavaWeb上传**: 在JavaWeb开发中,文件上传通常涉及到Servlet、Commons...
本教程将深入探讨如何实现一个带有进度条显示的文件上传功能,这对于提升用户体验至关重要,因为用户可以直观地看到文件上传的进度。 首先,我们需要了解JSP的基本原理。JSP是一种用于创建动态Web页面的技术,它...
本文将详细介绍如何在Java环境中实现图片上传功能,并涉及到关键的库文件`commons-fileupload.jar`和`UploadPro`。 首先,`commons-fileupload.jar`是Apache Commons FileUpload库的JAR文件,它提供了处理HTTP请求...
总结来说,实现"JSP+servlet上传文件有进度条"需要结合JSP、Servlet、文件上传库(如Commons-FileUpload)以及前端的AJAX和JavaScript技术。通过异步请求和实时的进度反馈,为用户提供流畅的文件上传体验。在实际...
本篇文章将深入探讨如何使用Apache Commons FileUpload库来创建一个带有进度条的文件上传功能。 首先,我们需要在项目中引入Apache Commons FileUpload库。通常,我们会通过Maven或Gradle将其作为依赖添加到构建...
**Ajax上传组件带进度条**是一种在Web应用中实现文件上传功能的方式,它结合了Ajax技术,能够在不刷新整个页面的情况下实现文件的异步上传,并且提供了可视化的进度条显示,提高了用户体验。这个组件是基于Struts2...
综上所述,实现JSP中的多文件上传和大文件上传进度条功能,需要结合后端处理和前端交互,合理利用Apache Commons FileUpload库,以及使用AJAX进行实时进度更新。同时,要注意安全性问题,确保应用的稳定性和用户数据...
在本篇文章中,我们将深入探讨如何在Java环境下,结合前端技术,实现图片上传进度条的功能。 首先,我们需要了解的是,Java图片上传进度条的实现涉及前后端的交互。前端通常使用HTML、CSS和JavaScript(如jQuery或...
`jsp|ajax+fileupload多文件上传逐一显示进度条`这个主题涉及到的是一个高级的前端技术实现,它结合了JavaServer Pages(JSP)、Asynchronous JavaScript and XML(AJAX)以及FileUpload库,为用户提供了一种动态、...