swfupload多文件上传控件的使用
swfupload是一个基于flash的多文件上传组件,前端是采用javascript脚本编写的,它与flash脚本进行交互,以实现多文件的上传功能。因前端是js脚本,所以在做web页面集成时很方便,以下通过对swfupload自带的demo进行一些修改,以实现简单的多文件上传功能。然后再简单介绍下,通过修改js源码,以满足不同的个性化需要。
swfupload目前的最新版本是v2.2.0.1,其官方源码地址:http://code.google.com/p/swfupload/,demo在线演示地址:http://demo.swfupload.org/v220/index.htm。该页面提供了多种上传演示界面,以适应不同的应用场景,这里不一一介绍。下载源码和demo的例子之后,在samples包中有demos和samples两个子文件夹。打开demos子目录,其下包含多个demo,因源码中的demo都是采用的php编写的,在这里,我们以multiinstancedemo作为模版,对其进行简单的改造,实现一个java编写的多文件上传的功能。
首先介绍下demo的目录结构,在multiinstancedemo中包含如下文件:

js目录中包含两个js文件:fileprogress.js和handlers.js,这两个文件的作用从名字上就能大概知道一些了,fileprogress.js主要是用来控制文件上传时的进度条显示的功能,而handlers.js则是配合fileprogress.js对文件上传时的各种处理功能。

其中,index.php是用于显示上传组件的前端页面,upload.php则是当index.php页面点击上传按钮之后,将文件上传进行处理的页面。js目录里的两个js文件则是在index.php页面中引用的两个js文件,最后那个图片资源文件,则是一个表示不同状态下的上传按钮。注意,这里仅介绍了multiinstancedemo目录下的文件,它们仅仅是一些前端处理的功能,真正的核心并不在这里,所以在该项目中,还需要其他的几个资源文件才能实现多文件上传的功能。通过打开index.php文件可以看到它还引用了其他的一些核心资源,从以下代码中就能看出来。


从以上代码中,我们可以看到,除了上面介绍的fileprogress.js和handlers.js文件之外,还有swfuoload.js、swfupload.queue.js,这两个文件则是与上传相关的功能了,比如前期验证,上传文件的个性化设置等等功能。除了js文件,还有一个css样式文件,控制页面以及控制条的显示样式等,这里就不作详细介绍。最后,剩下最重要的两个flash控件swfupload.swf和swfupload_fp9.swf,它们表示支持不同的flash版本,具体的介绍请看官方文档。但是swfupload也有个限制,不支持低于某个版本的flash,实际使用该控件时,一旦检测到低于该版本时,将会弹出相应的提示。
在这里再多说一句,以上仅仅是介绍了multiinstancedemo需要的必备文件,实际上,swfupload的不同demo中使用的文件不尽相同。因此,其他的文件功能在本文中不作介绍,欲知详情,请自行阅读官方文档。好了,言归正传, 既然已经知道一个完整的多文件上传需要哪些必备的控件,接下来就是动手改造项目的过程了。首先新建一个java的web项目,然后将上面提到的几个资源文件在webcontent中部署好,包括index.php和upload.php文件。然后将index.php改成index.jsp,并修改其源码,将php部分的源码都删掉,仅留下html代码即可。示例代码如下:
var oSelf = this;this.setTimer(setTimeout(function () {oSelf.disappear();}, 10000));最后,因为swfupload是国外的开源控件,所以,如果想给用户展示中文的提示,那就需要用户自己去汉化。