- 浏览: 1596434 次
- 性别:
文章分类
- 全部博客 (2929)
- 非技术 (18)
- Eclipse (11)
- JAVA (31)
- 正则表达式 (0)
- J2EE (4)
- DOS命令 (2)
- WEB前端 (52)
- JavaScript (69)
- 数据库 (8)
- 设计模式 (0)
- JFreechart (1)
- 操作系统 (1)
- 互联网 (10)
- EasyMock (1)
- jQuery (5)
- Struts2 (12)
- Spring (24)
- 浏览器 (16)
- OGNL (1)
- WebService (12)
- OSGi (14)
- 软件 (10)
- Tomcat (2)
- Ext (3)
- SiteMesh (2)
- 开源软件 (2)
- Hibernate (2)
- Quartz (6)
- iBatis (2)
最新评论
在Web应用开发中,常常会遇到文件的上传下载模块,下载文件时无论IE还是常用的flashget等下载软件都提供了友好的下载进度显示,可以让用户很
清晰的了解到下载的进度,特别是在进行大文件传输时,为用户提供了非常舒服的感觉...可以想像,一个几百M或者上G的文件传输过程没有进度显示,是一件
多么让人无法忍受的事情。
?然而在如今大多数的服务器上传组件中却没能提供文件上传进度的显示功能或相应开发接口,当进行大文件上传操作或低速网络上传时,长时间的无知状态常常使用户不知所措。
?本文(及附上的相应组件)提供了一套基于Java
Web的HTTP文件上传进度显示的解决方案,可以应用于jsp,servlet的web应用开发中,它由apache的commons-
fileupload-1.0组件扩展而来,没有改动任何原有组件代码,进度显示部分完全以一种扩展组件形式出现,你可以随时使用或不使用此显示组件,而
无需对原有上传应用程序进行大规模的变动。
ahxu-commons-fileuploadex-1.0在apache的commons-fileupload-1.0的基础上扩展了以下功能:
1.增加了文件类型检测功能,可以设定上传文件的类型,不被允许上传的文件将不能上传;
2.增加了对非文件域表单上传的过滤功能,可以选择或不选择上传接收非文件域的表单内容;
3.增加了文件上传进度报告功能,动态报告上传文件的文件名、大小、速度、总时间、剩余时间等,并提供了基于此进度报告功能的一种解决方案;
安装(以tomcat-5.0.27为例):
1.下载apache的commons-fileupload-1.0组件
下载地址http://apache.linuxforum.net/dist/jakarta/commons/fileupload/binaries/commons-fileupload-1.0.zip
[/url]
2. 下载ahxu的ahxu-commons-fileuploadex-1.0组件
下载地址[url=http://www.lizonghan.com/ahxu/ahxu-commons-fileuploadex-
1.0.jar]http://www.lizonghan.com/ahxu/ahxu-commons-fileuploadex-1.0.jar
3. 将此二个.jar文件放入一个已配置好的web应用的WEB-INF/lib目录下,例如:test/WEB-INF/lib
测试:
1.下载应用测试代码upload-jsp.rar,下载地址http://www.lizonghan.com/ahxu/upload-jsp.rar
,解压放在此web应用的根目录,例如:test2.运行测试upload.jsp,要求IE5.0以上,例如:http://127.0.0.1/test/upload.jsp
3.选择一个或二个大点儿的文件,最好几百M,然后上传,上传过程中会弹出一个进度对话框
图1 文件上传进度显示对话框
4.文件上传完毕后将显示上传结果,进度对话框自动关闭。
注:以上过程在win2000+sp4+tomcat5.0.27+IE6.0测试通过,其它环境是否能正常运行,希望大家测试后将信息反馈给我,谢谢!
有用的upload-jsp.rar:
upload-jsp.rar中包含的4个文件:upload.jsp、receive.jsp、progressbar.jsp、progressdetail.jsp
1.upload.jsp——文件上传表单页面;
此页面包含了文件上传的form表单,当然也可以是你的应用中任何你喜欢的有文件上传form表单的页面。此页面在submit时调用
javascript函数uploadBegin()弹出进度显示对话框(显示progressbar.jsp);你也可以根据需要自己定制,例如不用对
话框,用iframe等。但form的onSubmit时要调用uploadBegin(),如:
<script language="javascript">
function uploadBegin(){
theFeats = "height=200,width=320,location=no,menubar=no,resizable=no,scrollbars=no,status=no,toolbar=no";
strAppVersion = navigator.appVersion;
if (document.uploadForm.file1.value != "")
{
if (strAppVersion.indexOf('MSIE') != -1 && strAppVersion.substr(strAppVersion.indexOf('MSIE')+5,1) > 4)
{
winstyle = "dialogWidth=320px; dialogHeight:200px; center:yes";
window.showModelessDialog(<%="/""+response.encodeURL("progressbar.jsp")+"/""%>,window,winstyle);
}
}
}
</script>
<form
action=<%="/""+response.encodeURL("receive.jsp")+"/""%>
enctype="multipart/form-data" method="post" name="uploadForm"
id="uploadForm" onsubmit="uploadBegin();">
2.receive.jsp——文件上传接收页,即服务器端接收上传数据并处理上传数据的页面,可以用servlet来代替;
<%
List fileItemList=null;
//DiskFileUpload fu = new DiskFileUpload();//初使化使用原有apache的upload
DiskFileUploadEx fu = new DiskFileUploadEx();//初使化ahxu扩展后的组件
fu.setSizeMax(1000*1024*1024);//原有apache的upload:设置允许上传的最大值
fu.setAllowFiles(".txt;.jpg;.rm");//ahxu扩展后:设置允许的上传文件类型
try{
//fileItemList=fu.parseRequest(request);//使用原有apache的upload:由request接收上传文件
fileItemList=fu.parseRequestExSessionReport(request);//ahxu扩展后的:接收上传文件
Iterator fileItemListIte=fileItemList.iterator();
while(fileItemListIte.hasNext())
{
FileItem file=(FileItem)fileItemListIte.next();
out.println(file.getName()+"<br>");
//此处进行文件处理
}
out.println("上传成功");
}catch (Exception e){
out.println("上传失败<br>");
out.println(e.getMessage());
/*显示不被允许上传的文件列表,原有apache的upload无此部分 begin*/
if(e instanceof DiskFileUploadEx.InvalidFileUploadException){
out.println("<p>以下文件不被允许:</p>");
Iterator unAllowFileS=((DiskFileUploadEx.InvalidFileUploadException)e).getInvalidFileList().iterator();
while(unAllowFileS.hasNext()){
out.println((String)unAllowFileS.next()+"<br>");
}
/*显示不被允许上传的文件列表,原有apache的upload无此部分 end */
}
}
finally{
Thread.sleep(1000);
fu.clear(request);//ahxu扩展后的组件:接收上传文件后的清理工作,原有apache组件没有此过程
}
%>
3.progressbar.jsp——文件上传进度显示页,如图1;
你也可以根据自己的需要定制自己样式的进度显示页面。
4.progressdetail.jsp——文件上传进度数据读取页,用来构造上传进度信息,供progressbar.jsp读取显示,无需修改
简单应用部署的总结:
1.下载安装apache的commons-fileupload-1.0组件及ahxu-commons-fileuploadex-1.0组件;
2.编辑上传表单文件,注意要复制upload.jsp的uploadBegin(),以及form表单的onsubmit="uploadBegin();"
3.复制progressbar.jsp、progressdetail.jsp无需修改;
4.根据需要编辑receive.jsp页的内容。
发表评论
-
使用Java 动态代理实现AOP
2009-07-22 14:29 580目前整个开发社区对AOP(Aspect Oriented P ... -
Java中用动态代理类实现记忆功能
2009-07-22 14:30 681记忆是衍生自lisp,python, ... -
JAVA动态代理实现方法
2009-07-22 14:31 664在目前的Java开发包中包含了对动态代理的支持,但是其实现只支 ... -
对代理模式与Java动态代理类的理解(转)
2009-07-22 14:32 7421. 代理模式 代理模式的作用是:为其他对象 ... -
十年与java 相关的名字
2009-07-22 17:12 702RickardOberg:J2EE奇才 文/ ... -
搞懂java中的synchronized关键字
2009-07-28 17:48 580实际上,我关于java的基 ... -
Javascript评估用户输入密码的强度的方法 代码
2009-07-28 17:50 675用Javascript评估用户输入密码的强度密码已经是我们生活 ... -
15款基于浏览器扩展的WEB开发工具
2009-07-29 08:44 746WEB开发工具的使用已经 ... -
WEB 服务器调试利器 -- Tamper Data(转)
2009-07-29 08:53 725一. 简介 作为 Firefox 的插件, T ... -
图片和文字放一起,不能居中的解决方法
2009-07-29 14:47 920<td align="center" ... -
字符串转化为unicode编码
2009-07-31 16:16 859package com.util; import java. ... -
移位运算符的规则及其数学意义
2009-07-31 18:02 729移位运算符就是在二进制的基础上对数字进行平移。按照平移的方 ... -
几个谜题,深入的了解java
2009-08-03 17:02 702在2009年的JavaOne大会上,Joshua Bloch和 ... -
解开JavaScript生命的达芬奇密码
2009-08-05 17:56 712解开JavaScript生命的达芬奇密码 ——如何使用Jav ... -
掌控上传进度的AJAX Upload(转贴)
2009-08-05 17:59 688掌控上传进度的AJAX Uploa ... -
一、我对java中编码的理解(摘)
2009-08-06 09:17 5941. 编码的产生 对电 ... -
四、深入下package,import:(摘)
2009-08-06 09:18 671注:因package,import涉及较多内容,另开一个帖子了 ... -
三、我对java中类路径的理解(摘)
2009-08-06 09:18 501Java中的类路径分“编译后的存放路径” 和 “运行时的查找路 ... -
二、我对java中类装载的理解(摘)
2009-08-06 09:18 7461.Java中的所有类,必须 ... -
java class文件格式解析(摘)
2009-08-06 09:19 7631.目的 ...
相关推荐
5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 ...
当需要上传的文件比较大的时候,提供一个显示上传进度的进度条就很有必要了。 在PHP 5.4以前,实现这样的进度条并不容易,主要有三种方法: 1.使用Flash, Java, ActiveX 2.使用PHP的APC扩展 3.使用HTML5的File API 第...
5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 ...
5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 ...
5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 ...
5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 ...
5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 6.4...
但是以另一种方式,DP解决方案还涉及诸如备忘录或滚动数组之类的实现技术,这使得C ++ / Java中的实现通常不像最初的想法那么清晰。 所以我想知道是否有可能 1.设计一种语言,该语言与如何递归解决问题的原始想法...
5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 ...
5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 ...
.NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C# 2.0会给我们带来什么 泛型技巧系列:如何提供类型参数之间的转换 C#2.0 - Object Pool 简单实现 ...
5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 ...
SpringBoot项目在线课程管理系统是一个基于Java ...总体来说,SpringBoot项目在线课程管理系统以其灵活的功能、友好的用户界面和强大的后端支持,为教育行业提供了一种高效、便捷、可靠的在线教学和管理解决方案。
第7章涉及到怎样把XML组件组装到端到端解决方案中。本章介绍了一个具有XML功能的数据库应用的设计,其中包括用XML增强的Web站点和由商家到客户(business-to-client,B2C)的消息传递系统。上述XML和XSL实例文件以及...
5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 ...
JSP图片小偷 v1.0_jsp_tupian.rar 是一个计算机专业的JSP源码资料包,它提供了一种简单而有效的方法来获取网页上的图片。该工具使用JSP技术编写,可以在任何支持JSP的Web服务器上运行。通过使用这个工具,用户可以...
5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 ...
C#语言是微软公司在2000年7月发布的一种全新切简单、安全、面向对象的程序设计语言。它吸收了C++、Visual Basic、Delphi、Java等语言的优点,体现了当今最新的程序设计技术的功能和精华。C#继承了C语言的语法风格,...
但是在线订餐网作为一种 尚未成功的有潜质的电子商务分支必将在近几年获得空前的发展。在线订餐网作为电子 商务的一个分支目前正处于起步阶段。可充分发挥电子商务的力量,方便市民生活、提 高市民的就餐效率。充分...
- 一站式支付解决方案,统一下单接口,支持支付宝、微信、网银等多种支付方式。不涉及业务的纯粹的支付平台。 - 统一下单(统一下单接口、统一扫码)、订单管理、数据分析、财务报表、商户管理、渠道管理、对账系统...