`
yezi
  • 浏览: 277942 次
  • 来自: 北京
社区版块
存档分类
最新评论

关于Webwork下的文件上传进度条

阅读更多
Webwork下的文件上传看了很多的文章收获不少,目前比较简单的方式是通过webwork提供的FileUploadInterceptor来实现的,这个拦截器在使用的时候是非常方便的,通过这个拦截器可以自动获得上传文件的文件名、文件类型、文件三个部分。然后用户可以再进行后续的处理,包括将文件信息存入数据库、移动文件到制定的文件夹等。对于这个拦截器的工作原理大致是这样的,用户执行Action的时候,拦截器构造request:
java 代码
  1. HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);  

然后判断request是否是MultiPartRequestWrapper的一个实例,接下来初始化MultiPartRequestWrapper:

java 代码
  1. MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;  

这里就通过判断用户在webwork.properties中定义的上传类型来构造MultiPartRequestWrapper,

java 代码
  1. String parser = Configuration.getString(WebWorkConstants.WEBWORK_MULTIPART_PARSER);   
  2. // If it's not set, use Jakarta   
  3. if (parser.equals("")) {   
  4.     log.warn("Property webwork.multipart.parser not set." +   
  5.             " Using com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequest");   
  6.     parser = "com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequest";   
  7. }   
  8. // legacy support for old style property values   
  9. else if (parser.equals("pell")) {   
  10.     parser = "com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest";   
  11. else if (parser.equals("cos")) {   
  12.     parser = "com.opensymphony.webwork.dispatcher.multipart.CosMultiPartRequest";   
  13. else if (parser.equals("jakarta")) {   
  14.     parser = "com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequest";   
  15. }  

假设用户定义了jakarta,这时候就通过JakartaMultiPartRequestMonitor来实现文件的上传(通过common-fileupload),同时获得文件的名称和类型等信息。

对于文件上传进度条,网上提供了一种给予servlet的解决办法,这种方式可以很方便的使用在Struts模式下的mvc架构的程序中,其中用到的类包可以在http://www.telio.be/blog/wp-content/uploads/2006/01/上找到,这种方式的实质是用到了dwr的回调方式。servlet的上传方式是通过下面的方式实现的:

java 代码
  1. ServletFileUpload upload = new ServletFileUpload(factory);   
  2. upload.parseRequest(servletRequest);  

而进度条是通过实现一个factory,来实现上传状态的回调。

webwork的拦截器实际已经将上传文件到临时目录封装在内部的类中,这样我们就无法构造factory来实现进度条的监控,给予以上的考虑,想了一个比较笨的办法,将MultiPartRequestWrapper修改一下,增加一个新的属性定义:

java 代码
  1. else if (parser.equals("monitor")) {   
  2.     parser = "com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequestMonitor";  
  3. }  

这样用户可以在webwork.properties中设置上传的模式为monitor,然后自己实现一个JakartaMultiPartRequestMonitor,在这个class中,将原有的factory实现方法通过带进度条的方式来实现,这样就能监控到servlet上传的进度。基本的实现思路就是这样的。下面将几个配置过程整理一下:

1、将修改的两个类添加到webwork2.2.x。jar中:MultiPartRequestWrapper。class和JakartaMultiPartRequestMonitor.class
2、修改webwork.webwork.properties:webwork.multipart.parser=monitor
3、将刚才下载的be.telio.mediastore.ui.upload的代码加入
4、修改dwr.xml文件,添加下面的代码:

xml 代码
  1. <create creator="new" javascript="UploadMonitor">  
  2.       <param name="class" value="be.telio.mediastore.ui.upload.UploadMonitor"/>  
  3. create>  
  4. <convert converter="bean" match="be.telio.mediastore.ui.upload.UploadInfo"/>  

5、将下载的包中的resource文件夹拷贝到web目录下
6、建立一个文件上传action
7、建立上传页面,添加几个js,同时在form中添加startProgress(): 

    <script src='/ugc/resources/js/upload.js'> </script>
    <script src='/ugc/dwr/interface/UploadMonitor.js'> </script>
    <script src='/ugc/dwr/engine.js'> </script>
    <script src='/ugc/dwr/util.js'> </script> 

    <ww:form action="doUpload" method="POST" enctype="multipart/form-data" onsubmit="startProgress()">这样webwork的文件上传进度条就可以实现了

  •  
  • 以上的方法有两点感觉不足,

    1、修改了webwork的jar,这样对以后的扩展不好,应该自己实现拦截器和request包装类

    2、只实现了jakarta类型的文件上传,对于cos没有实现

    欢迎大家指正和帮助!

     

  • 这里要注意的是js的路径
    分享到:
    评论
    6 楼 robbin 2007-05-18  
    jarit 写道
    看了一下webwork上传代码,maxSize要等文件上传完才作判断,请问楼主有办法在没有传完的情况下就中止继续上传么?谢谢


    应用服务器可以设置POST的maxSize。
    5 楼 jarit 2007-05-18  
    看了一下webwork上传代码,maxSize要等文件上传完才作判断,请问楼主有办法在没有传完的情况下就中止继续上传么?谢谢
    4 楼 yezi 2007-05-18  
    jarit 写道
    感谢楼主分享~
    想请教一下,楼主怎么限制上传文件的大小呢?


    webwork.multipart.maxSize=...
    3 楼 jarit 2007-05-18  
    感谢楼主分享~
    想请教一下,楼主怎么限制上传文件的大小呢?
    2 楼 yezi 2007-05-18  
    blog上发过来的,没注意,修改了一下
    1 楼 ddandyy 2007-05-18  
    你这里又没有Link什么的   发代码最好使用bbcode模式
    否则代码框里面会乱掉的

    相关推荐

      fileupload+dwr2+webwork2实现带进度条上传文件

      "fileupload+dwr2+webwork2实现带进度条上传文件"这个主题涉及到三个关键技术和组件:FileUpload、Direct Web Remoting (DWR) 和 WebWork2,它们协同工作以提供一个带有进度条的高效、用户友好的文件上传体验。...

      webwork 多文件上传

      本篇文章将深入探讨如何在WebWork框架下实现多文件上传,并结合实际案例进行解析。 首先,了解WebWork框架的基本原理是必要的。WebWork通过Action类处理HTTP请求,它将用户交互与业务逻辑分离,提供了一种优雅的...

      webwork中上传文件

      总的来说,这个例子展示了如何在WebWork框架下实现一个简单的多文件上传功能。用户选择文件后,这些文件将通过HTTP请求发送到服务器,服务器端的`FileUploadAction`接收并处理这些文件。注意,实际应用中可能还需要...

      webwork 上传文件与下载文件 使用笔记

      ### WebWork 上传文件知识点详解 #### 一、WebWork框架简介 WebWork是一个基于Java的开源Web应用程序框架,它...以上内容覆盖了如何在WebWork框架下实现文件上传与下载的主要步骤和技术细节,希望对大家有所帮助。

      webwork文件上传

      在本教程中,我们将探讨如何利用WebWork实现文件上传功能,特别是针对Excel文件的处理。 首先,理解WebWork的MVC模式至关重要。在WebWork框架中,控制器负责接收用户请求,调用业务逻辑,并将结果传递给视图进行...

      WebWork 文件上传

      在这个“WebWork 文件上传 多个文件上传 范例”中,我们将深入探讨如何使用WebWork实现多文件上传的功能。 首先,了解文件上传的基本原理是必要的。在HTTP协议中,文件上传通常通过POST请求实现,其中包含了...

      webwork 配置文件

      4. **部署描述符**:`web.xml`还包含了关于Web应用的其他元数据,如欢迎文件、错误页面等。 在实际应用中,通过灵活地配置这两个文件,开发者可以实现对应用程序的精细控制,包括但不限于URL路由、权限管理、错误...

      webwork的上传和下载的Demo

      7. **用户体验**:为了让用户知道文件上传或下载的状态,可以使用AJAX或者WebWork的异步更新功能来显示进度条或状态提示。 8. **性能优化**:对于大量文件操作,可以考虑使用多线程处理,或者采用流式读写减少内存...

      webwork 文件上传下载

      本篇文章将围绕"webwork 文件上传下载"这个主题,深入探讨WebWork框架下如何实现文件的上传和下载。 首先,让我们了解文件上传的基本概念。在Web应用中,文件上传通常涉及HTML表单、HTTP协议和服务器端处理。在...

      webwork+ibatis上传文件简单实例

      在本文中,我们将深入探讨如何使用WebWork和iBatis框架来实现文件上传的功能。WebWork是一个基于Action的MVC(Model-View-Controller)框架,而iBatis则是一个SQL映射框架,用于简化Java应用程序中的数据库操作。...

      webwork上传下载

      此外,"webwork上传文件.txt"可能是一个文本文件,其中包含了WebWork文件上传的源代码示例。通常,这样的文件会包含Action类的代码,展示如何处理上传的文件,包括获取`Part`对象,验证文件,以及将文件保存到服务器...

      WebWork2.2.7之简单文件上传

      在WebWork的动作类中,我们可以使用`org.apache.struts.upload.FormFile`或WebWork自己的`com.opensymphony.webwork上传.FileUploadActionSupport`来接收和处理上传的文件。以下是一个简单的WebWork2.2.7动作类示例...

      Webwork 实现文件上传下载代码详解

      WebWork 当然也提供了很友好的拦截器来实现对文件的上传,让我们可以专注与业务逻辑的设计和实现,在实现上传和下载时顺便关注了下框架上传下载的实现。 1. 包装 Request 请求 •每次客户端请求 Action 时,都会...

      webwork2.2.5 jar 文件

      webwork 2.2.5框架资源,大家自由学习.学习框架

      WEBWORK

      4. **xwork.xml** 文件:这是 WebWork 的核心配置文件,定义了 Action、结果(Result)和包(Package)。`xwork-default.xml` 包含了 WebWork 的默认配置,而自定义配置可以通过 `include` 元素引入。在提供的配置中...

      webwork上传操作说明

      webwork上传文件pdf文件说明文档

      webwork的jar包

      "webwork2.2.4%2Bspring%2Bhibernate"可能是一个包含了整合WebWork 2.2.4、Spring和Hibernate配置的子目录或文件,这通常包括配置文件(如web.xml、struts-config.xml等)、类库和可能的示例代码,帮助开发者快速...

      webwork2个人学习总结

      - 将下载的JAR包放入项目中的LIB目录,包括default文件夹下的所有JAR包和webwork-2.2.6.jar。 - 这些JAR包是Webwork2运行的基础,它们包含了框架的核心类和依赖库。 2. **Web.xml配置**: - 在`web.xml`文件中,...

    Global site tag (gtag.js) - Google Analytics