`

基于Java Web的文件上传进度显示的一种解决方案

 
阅读更多

在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页的内容。

分享到:
评论

相关推荐

    多文件上传,并显示每一个的进度

    SpringMVC提供了一套完整的文件上传解决方案,包括`MultipartFile`接口用于接收上传的文件。 1. **SpringMVC的文件上传处理**:在Controller层,我们可以定义一个方法,接收`MultipartFile[] files`参数,这样就...

    AJAX+JSP实现基于WEB的文件上传的进度控制

    【AJAX+JSP实现基于WEB的文件上传的进度控制】技术详解 ...综上所述,这种实现方式充分利用了AJAX的异步特性,实现了文件上传过程的非阻塞,并通过JSP处理后台逻辑,提供了一种高效、友好的文件上传解决方案。

    性能最好的Java文件上传组件

    "性能最好的Java文件上传组件"是指一种优化了上传速度和资源消耗的工具,它能够有效地处理大文件上传、多文件并发上传等问题,提高应用的用户体验。在这个场景中,我们提到了基于"COS"的Java文件上传组件。COS通常指...

    Flex+Java 文件上传

    在本文中,我们将深入探讨...这个系统允许用户在Flex前端选择文件,然后通过Java Servlet在后端处理文件上传,提供了一种灵活且可扩展的解决方案。在实际应用中,可以根据需求调整代码以满足特定的安全性和性能要求。

    Java大文件上传(1GB,图片,视频,Flash文件,音频文件)

    Java作为一种广泛使用的服务器端编程语言,对于处理大文件上传提供了多种策略和技术。本篇文章将详细探讨Java实现大文件上传的原理、方法及优化策略。 首先,我们需要理解HTTP协议在上传大文件时面临的挑战。标准的...

    swf+Extjs+java多文件上传项目

    【标题】"swf+Extjs+java多文件上传项目"是一个基于SwfUpload插件、ExtJS前端框架和Java后端技术实现的文件批量上传解决方案。该项目旨在提供一种高效、用户友好的文件上传体验,适用于需要处理大量文件上传需求的...

    基于Java的大文件上传的Applet mupload.zip

    虽然Java Applet已经过时,但其背后的原理和技术,如文件切片、多线程、断点续传等,仍然是现代文件上传解决方案的核心组成部分。理解和掌握这些技术,对于任何从事Web开发的程序员来说都是有价值的。

    前端WebUploader后端Java大文件分片上传

    2. **大文件分片上传**:大文件分片上传是解决大文件上传问题的一种常见策略。它将大文件切割成多个小片段(如每片1MB),然后逐个上传。这种方式可以避免单个网络中断导致整个文件上传失败,同时能充分利用浏览器和...

    java跨全域兼容ie/ff/chrome浏览器多文件上传(原创)

    本示例通过"java跨全域兼容ie/ff/chrome浏览器多文件上传(原创)"的标题,我们可以看出这是一个解决浏览器兼容性问题并实现跨域文件上传的解决方案。下面将详细解释这个主题涉及的关键知识点。 1. **跨域资源共享 ...

    web项目支持大文件上传的代码

    本项目提供了一种纯JSP实现的解决方案,旨在帮助开发者轻松地将大文件上传功能集成到自己的Web应用程序中。以下是这个项目的核心知识点及详细解释: 1. **大文件上传原理**:传统HTTP表单上传方式对文件大小有限制...

    jquery uploadify java文件上传

    `jQuery Uploadify`是一款基于JavaScript和jQuery的插件,它提供了一种优雅的方式来进行多文件上传,具有良好的用户体验和丰富的自定义选项。这个插件通过异步方式实现文件上传,使得用户在上传大文件时无需等待页面...

    基于java的大文件上传的Applet mupload.zip

    本项目"基于java的大文件上传的Applet mupload.zip"显然是利用Java Applet技术实现大文件上传的一种解决方案。下面将详细探讨相关的知识点。 首先,Java Applet是Java平台上的一种小程序,它可以在用户的Web浏览器...

    文件异步上传,显示进度条

    3. **进度条显示**:在文件上传过程中,进度条是一种有效的反馈机制,它显示了文件上传的当前状态和完成度。这通常通过监听上传过程中的事件,如“onprogress”,来实时更新进度条。在前端,可以使用HTML5的`...

    web方式通过flash批量上传文件

    "Web方式通过Flash批量上传文件"是一种解决方法,它利用了Adobe Flash技术来实现多文件同时上传的功能。本文将深入探讨这个主题,包括其原理、优势以及实现步骤。 Flash技术在过去的网页交互中扮演了重要角色,它...

    java实现大文件上传分片上传断点续传.zip

    本项目采用SpringBoot框架实现了一种高效、可靠的解决方案,支持大文件的分片上传和断点续传功能。以下是该技术实现的核心知识点: 1. **大文件上传**:大文件上传是指处理超过内存或服务器限制的文件,避免一次性...

    swfupload+fileupload文件批量上传,带进度条百分比显示

    综上所述,这个项目提供了一种高效、直观的文件批量上传解决方案,结合了前端的SWFUpload和后端的FileUpload组件,同时通过Flash实现了上传进度的可视化,为用户提供了良好的交互体验。在Eclipse中直接运行的特性...

    服务器web管理和文件上传系统.zip

    【服务器Web管理与文件上传系统】是一个基于Java技术构建的应用,它主要用于远程管理和维护服务器,同时提供文件上传功能。在Java开发中,这样的系统通常利用Servlet、JSP、Spring Boot等框架来实现,以实现高效的...

    flex+java文件上传完整实例

    本示例“flex+java文件上传完整实例”提供了一个完善的解决方案,它结合了Adobe Flex前端技术和Java后端技术,实现了用户友好的文件上传功能。Flex是一种开源的RIA(富互联网应用)开发框架,而Java则提供了强大的...

    java文件上传下载

    本项目提供的是一套基于Java的完整文件上传下载解决方案,利用了JSP和MySQL数据库进行数据存储,并且包含了SmartUpload组件以简化文件上传操作。 首先,我们来看一下核心知识点: 1. **JSP (JavaServer Pages)**:...

    基于Java的源码-大文件上传的Applet mupload.zip

    这个名为“mupload”的压缩包提供了一种解决方案,它包含一个Java Applet来处理大文件的上传。Applet是一种小型的Java程序,可以在用户的浏览器中运行,使得客户端与服务器之间能够进行交互。 首先,让我们深入了解...

Global site tag (gtag.js) - Google Analytics