这期内容当中小编将会给大家带来有关WebWork中怎么实现文件上传功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
Webwork文件上传看了很多的文章收获不少,目前比较简单的方式是通过webwork提供的FileUploadInterceptor来实现Webwork文件上传,这个拦截器在使用的时候是非常方便的,通过这个拦截器可以自动获得上传文件的文件名、文件类型、文件三个部分。然后用户可以再进行后续的处理,包括将文件信息存入数据库、移动文件到制定的文件夹等。
对于这个拦截器的工作原理大致是这样的,用户执行Action的时候,拦截器构造request:
java 代码
HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);
然后判断request是否是MultiPartRequestWrapper的一个实例,接下来初始化MultiPartRequestWrapper:
java 代码
MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) request;
这里就通过判断用户在webwork.properties中定义Webwork文件上传类型来构造MultiPartRequestWrapper,
java 代码
String parser = Configuration.getString (WebWorkConstants.WEBWORK_MULTIPART_PARSER); // If it's not set, use Jakarta 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"; } // legacy support for old style property values 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来实现Webwork文件上传(通过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 < SPAN>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、建立Webwork文件上传页面,添加几个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中怎么实现文件上传功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。