抄了两个地方,其实是一个地方。
先给出地址:
http://wiki.springside.org.cn/display/springside/AjaxUpload
http://www.telio.be/blog/2006/01/06/ajax-upload-progress-monitor-for-commons-fileupload-example
其实两个都是一样的,春天旁边就是抄那个博客的。这两个是用DWR的,我是用buffalo,但是修改程度并不大。
先讲一下思路:
首先要替换掉struts固有的上传方式,这样对应用程序修改最小,写几个类并且配置一下就可以顶掉,并不复杂。
其次是在JSP中定时获得文件上传信息,这就需要AJAX和后台服务配合,算是一个典型应用。
最后是简单地把进度条更新显示一下,这个非常简单。
改造过的文件下载地址:http://groups-beta.google.com/group/javaparty/web/ajax.tar.gz。其中不包括buffalo。
说一下文件结构:
AjaxMultipartRequestHandler.java 这个类不复杂,就是处理上传文件的,开头两个变量是控制最大文件和缓存数,如果需要则修改。其实也就是交给commons-fileupload去处理了。
MonitoredDiskFileItem.java
MonitoredDiskFileItemFactory.java
MonitoredOutputStream.java
这两个类就是具体处理上传文件的类,其实就是多了一个listener,为了在上传的时候能够将信息传给listener,一个典型的java处理方案。
OutputStreamListener.java
UploadListener.java
这两个就是listener的interface和implement,在这里我做了改造,springside是将内容放入session,而且每次都
创建一个对象将上一个顶掉,这个是不好的习惯。我将放入动作移到了UploadMonitor里去了,这样便于集中管理。春天旁边显然是抄了抄,没做啥大
改。
UploadInfo.java
UploadMonitor.java
applicationContext-service.xml
这几个类是与buffalo传递信息,配置文件则是配置buffalo用的。
UploadInfo是一个信息实体,包括了上传文件的状态、字节数、时间等。
UploadMonitor.java是一个服务类,内部创建了一个map来存放上传文件信息,在上传结束的时候将文件信息删除,这样避免了map过大。map使用id来作key,而这个id是由AJAX传过来的,目前是使用session id。
配置buffalo非常简单,这是典型的spring配置,当然也可以使用properties来配置,参见buffalo的配置。
<bean id="uploadMonitor" class="com.kicoy.ajaxupload.UploadMonitor">
</bean>
<!-- Ajax -->
<bean name="buffaloConfigBean" class="net.buffalo.service.BuffaloServiceConfigurer">
<property name="services">
<map>
<entry key="uploadMonitor"><ref bean="uploadMonitor"/></entry>
<!-- oterh entries… -->
</map>
</property>
</bean>
就配这两个bean就够了,可以加在自己的spring里。
struts-controller.xml
这个是配struts的上传控制和文件配置,就是替换struts自己的上传文件。
ajaxupload.js
ajaxupload.css
ajaxupload.jsp
importForm.jsp
JSP页面中控制进度条的JS和ajax控制服务。
主要对ajaxupload.js做了改造,主要是调用方式改变了,从DWR改为buffalo。
importForm.jsp是使用示例,服务端的接收文件参见struts文档,并没有特殊的。
buffalo.js
prototype.js
是buffalo的文件,要先安装好buffalo,参见buffalo的文档。
--
Good luck
magicgod
http://www.kicoy.comhttp://www.gaimcn.commake some code, a web page, do something for open source
写一段代码、做一个网页、发一个链接,每天为开源做一点事。