SWFUpload详解

SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合FlashJavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统标签的文件上传模式。

当前版本v2.2.0.1

官网示例:demo.swfupload.org

官方文档:http://demo.swfupload.org/Documentation/

下载地址:

https://code.google.com/p/swfupload/downloads/list

主要特点

Ø  可以同时选择多个文件

Ø  类似AJAX的无刷新上传

Ø  可以显示上传进度

Ø  良好的浏览器兼容性

Ø  兼容其他JavaScript库 (例如:jQuery, Prototype等)

Ø  支持Flash 8和Flash 9及更高版本

原理简介:


开始配置

准备工作:

从官网下载的压缩包中,拿到以下文件(附件中有整理好的文件)

SWFUpload v2.2.0.1 Core\swfupload.js

SWFUpload v2.2.0.1 Core\Flash\swfupload.swf

SWFUpload v2.2.0.1 Samples\demos\simpledemo\js\fileprogress.js

SWFUpload v2.2.0.1 Samples\demos\simpledemo\js\handlers.js

SWFUpload v2.2.0.1 Samples\demos\simpledemo\js\swfupload.queue.js

放在指定文件夹中

deploy\media\js\swfupload

deploy\jbossweb-tomcat41.sar\META-INF\mime.types

swfupload.swf、swfupload.js是核心文件

handlers.js是事件处理

fileprogress.js是文件队列处理

mimetype.properties是mime类型码表

从页面初始化到用户选择文件最后上传结束是这样的一个过程:

a页面载入(初始化选择控件)—b用户选择多文件—c形成文件队列—d触发上传(队列中的文件依次上传)—e后台处理—f向前台返回结果

其中d-e-f将根据文件数量重复执行,从a-f过程中所有的动作都由事件来驱动,可以自定义捕获每个事件,所以对于程序员来说非常适合订制自己的上传界面。

SWFUpload官方对PHP支持比较好,JSP需要修改和移植,而为了适配公司的Struts 1.x更需要解决如下问题:

1.       对表单验证失败的不进行上传,避免服务器资源浪费。

解决办法:用户批量选择完文件后,先存入队列,点击页面的提交按钮,先验证表单各项都正确无误,然后上传文件,最后进行提交。

2.       SWFUpload上传的文件使用file.getContentType()取得的MIME类型总是多媒体。

解决办法:使用MimetypesFileTypeMap用后缀名从资源文件中获取MIME类型。

gds.jap.affix.business. ManageAffixService.createAttachmentUseSWF(String aWorkID, String aSource)

3.       SWFUpload使用的编码格式是UTF-8,中文名称在GBK下会成乱码。

解决办法:把上传的文件名作为参数,后台用URLDecoder转码获取正确的文件名。

JSP页面

Ø  引入JS文件

Ø  定义初始化参数

Ø  声明、创建SWF对象

Ø  修改提交方式

Struts Form

Ø  声明接收FormFile的对象

Ø  声明获得附件最大限制的getter方法

Struts Action

Ø  从参数来获得上传的标识,进行上传的动作

Ø  从参数中获得上传文件名,进行转码

Ø  调用manageAffixService.createAttachmentUseSWF方法,解决MIME类型的问题

附件上传

gds.jap.affix.business. ManageAffixService.createAttachmentUseSWF(FormFile file, String fileName, String attachmentDesc, String clientIP)

猜你喜欢

转载自blog.csdn.net/dhdhxgx/article/details/17448077