如何基于buffalo显示上传文件的进度条

10 views
Skip to first unread message

magicgod

unread,
Dec 31, 2006, 11:59:14 AM12/31/06
to am...@googlegroups.com
抄了两个地方,其实是一个地方。
先给出地址:
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.com
http://www.gaimcn.com
make some code, a web page, do something for open source
写一段代码、做一个网页、发一个链接,每天为开源做一点事。

Michael Chen

unread,
Dec 31, 2006, 9:36:26 PM12/31/06
to am...@googlegroups.com
好帖,支持。应该对很多人有帮助的


--
Michael Chen
--------------------------------
Blog: http://michael.nona.name
MSN: jzch...@hotmail.com

alex

unread,
Jan 17, 2007, 3:36:00 AM1/17/07
to buffalo与Amowa
你好,我不能下载那个http://groups-beta.google.com/group/javaparty/web/ajax.tar.gz
的代码包,请问可以传我一份吗?duzhe...@gmail.com

magi...@gmail.com

unread,
Jan 18, 2007, 4:27:49 AM1/18/07
to buffalo与Amowa

alex

unread,
Jan 18, 2007, 9:05:36 PM1/18/07
to buffalo与Amowa
非常感谢你提供地址给我下载!!
Reply all
Reply to author
Forward
0 new messages