Webwork下的文件上传看了很多的文章收获不少,目前比较简单的方式是通过webwork提供的FileUploadInterceptor来实现的,这个拦截器在使用的时候是非常方便的,通过这个拦截器可以自动获得上传文件的文件名、文件类型、文件三个部分。然后用户可以再进行后续的处理,包括将文件信息存入数据库、移动文件到制定的文件夹等。对于这个拦截器的工作原理大致是这样的,用户执行Action的时候,拦截器构造request:
java 代码
- HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);
然后判断request是否是MultiPartRequestWrapper的一个实例,接下来初始化MultiPartRequestWrapper:
java 代码
- MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;
这里就通过判断用户在webwork.properties中定义的上传类型来构造MultiPartRequestWrapper,
java 代码
- String parser = Configuration.getString(WebWorkConstants.WEBWORK_MULTIPART_PARSER);
-
- if (parser.equals("")) {
- log.warn("Property webwork.multipart.parser not set." +
- " Using com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequest");
- parser = "com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequest";
- }
-
- else if (parser.equals("pell")) {
- parser = "com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest";
- } else if (parser.equals("cos")) {
- parser = "com.opensymphony.webwork.dispatcher.multipart.CosMultiPartRequest";
- } else if (parser.equals("jakarta")) {
- parser = "com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequest";
- }
假设用户定义了jakarta,这时候就通过JakartaMultiPartRequestMonitor来实现文件的上传(通过common-fileupload),同时获得文件的名称和类型等信息。
对于文件上传进度条,网上提供了一种给予servlet的解决办法,这种方式可以很方便的使用在Struts模式下的mvc架构的程序中,其中用到的类包可以在http://www.telio.be/blog/wp-content/uploads/2006/01/上找到,这种方式的实质是用到了dwr的回调方式。servlet的上传方式是通过下面的方式实现的:
java 代码
- ServletFileUpload upload = new ServletFileUpload(factory);
- upload.parseRequest(servletRequest);
而进度条是通过实现一个factory,来实现上传状态的回调。
webwork的拦截器实际已经将上传文件到临时目录封装在内部的类中,这样我们就无法构造factory来实现进度条的监控,给予以上的考虑,想了一个比较笨的办法,将MultiPartRequestWrapper修改一下,增加一个新的属性定义:
java 代码
- else if (parser.equals("monitor")) {
- parser = "com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequestMonitor";
- }
这样用户可以在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 代码
- <create creator="new" javascript="UploadMonitor">
- <param name="class" value="be.telio.mediastore.ui.upload.UploadMonitor"/>
- create>
- <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的路径
分享到:
相关推荐
fileupload+dwr2+webwork2实现带进度条上传文件
webwork中上传文件,webwork文件上传.doc
WebWork 文件上传 多个文件上传 范例
项目里需要实现webwork 上传与下载文件操作, 自己摸索过程中出现了很多问题,一一解决, 记录下来本准备做参考,现贡献给大家, 记得有点乱,耐心看完,一定会有帮助的。
简单的使用webwork框架实现了文件上传的功能 主要是针对EXCEL文件
NULL 博文链接:https://xiaoqiang21.iteye.com/blog/763674
webwork框架xwork.xml、web.xml这两个文件让你可以随意过滤自己想要过滤的某些namespace命名空间下的.action、.jsp、*。
WebWork 当然也提供了很友好的拦截器来实现对文件的上传,让我们可以专注与业务逻辑的设计和实现,在实现上传和下载时顺便关注了下框架上传下载的实现。 1. 包装 Request 请求 •每次客户端请求 Action 时,都会...
webwork 2.2.5框架资源,大家自由学习.学习框架
webwork上传文件pdf文件说明文档
NULL 博文链接:https://cxl2012.iteye.com/blog/2011487
这个是我查看了大量的网上文档后,利用webwork的上传机制写的一个上传到例子。因为网上很多都转来转去的文档。能不能不运行,还不一定。改起来很费时,所以我把我写的上传上去。力争做到用最少的代码和简单配置来...
NULL 博文链接:https://sgl124764903.iteye.com/blog/812973
WEBWORK的配置
webwork 控制反转小例子,配置文件的写法
webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程
WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包
WebWork2.0讲解说明,ppt文件。
webwork上传下载webwork上传下载webwork上传下载webwork上传下载webwork上传下载webwork上传下载webwork上传下载webwork上传下载
我自己写的。上次的只有上传没有下载。这次的添加了下载的功能。我自己备份用的。有需要可以参考。保证能够运行