SWFUpload是一个flash和js相结合而成的文件上传插件,其功能非常强大。以前在项目中用过几次,但它的配置参数太多了,用过后就忘记怎么用了,到以后要用时又得到官网上看它的文档,真是太烦了。所以索性就把它的用法记录下来,也方便英语拙计的同学查看,利人利己,一劳永逸。(ps:SWFUpload早就不再更新了,官网也打不开了,推荐大家使用Plupload来代替SWFUpload,Plupload以html5上传方式为主,在不支持html5的浏览器中会自动回退到flash的上传方式,功能灰常强大!使用方法可以看我写的《前端上传组件Plupload使用指南》)
SWFUpload的特点:
1、用flash进行上传,页面无刷新,且可自定义Flash按钮的样式;
3、允许一次上传多个文件,但会有一个上传队列,队列里文件的上传是逐个进行的,服务器端接收文件时跟普通的表单上传文件是一样的;
4、提供了丰富的事件接口供开发者使用;
1、引入相应的js文件
2、实例化SWFUpload对象,传入一个配置参数对象进行各方面的配置。
3、点击SWFUpload提供的Flash按钮,弹出文件选取窗口选择要上传的文件;
6、文件上传过程中会触发相应的事件,开发者利用这些事件来更新ui、处理错误、发出提示等等;
SWFUpload包括三部分的内容:SWFUpload.js、swfupload.swf、初始化配置参数及各种事件处理函数。所以首先在页面引入SWFUpload.js
然后实例化一个SWFUpload对象:
我们看到要实现一个swfupload上传功能很简单,就是实例化一个swfupload对象。但繁琐的地方就在于实例化实要用到的参数配置对象,以及各种事件的发生时机以和提供的参数。所以重点来了。下面几个表格对开发中要用到的东西列举了出来,虽然已经蛮多了,但并不是swfupload的全部,我列出来的只是常用的。要查看完整的文档,请到swfupload官网上查询。
一、配置参数对象中的常用属性及说明
403_49@ | 403_49@ | 描述@H_403_49@ | 上传文件的服务器端页面的URL地址,可以是绝对地址,也可以是相对地址,当为相对地址时相对的是当前代码所在的文档地址 | preserve_relative_urls@H_403_49@file_post_name@H_403_49@ | 文件域上传文件时的name属性,服务器端接收页面通过该名称来获取上传的文件 | post_params@H_403_49@文件一起上传,文件上传要附加一些信息时很有用 | use_query_string@H_403_49@属性定义的参数会以post方式上传;为true时,则会以get方式上传(即参数会以查询字符串的形式附加到url后面) | file_types@H_403_49@属性指定了允许上传的文件类型,当有多个类型时使用分号隔开,比如:*.jpg;*.png,允许所有类型时请使用 *.* | file_types_description@H_403_49@文件选取窗口中显示的文件类型描述,起一个提示和说明的作用吧 | file_size_limit@H_403_49@上传的文件的最大体积,可以带单位,合法的单位有:B、KB、MB、GB,如果省略了单位,则默认为KB。该属性为0时,表示不限制文件的大小。 | file_upload_limit@H_403_49@上传多少个文件,当上传成功的文件数量达到了这个最大值后,就不能再上传文件了,也不能往上传队列里添加文件了。把该属性设为0时表示不限制文件的上传数量。 | file_queue_limit@H_403_49@文件上传队列里最多能同时存放多少个文件。当超过了这个数目后只有当队列里有文件上传成功、上传出错或被取消上传后,等同数量的其他文件才可以被添加进来。当file_upload_limit的数值或者剩余的能上传的文件数量小于file_queue_limit时,则取那个更小的值 | flash_url@H_403_49@文件的绝对或相对地址,相对地址是指相对于当前的页面地址。实例化swfupload后,就不能再改变该属性的值了。 | prevent_swf_caching@H_403_49@随机数在swfupload.swf地址的后面,以阻止flash影片被缓存,这是为了防止某些版本的IE浏览器在读取缓存的falsh影片时出现的bug | button_placeholder_id@H_403_49@button_placeholder@H_403_49@ | button_image_url@H_403_49@ | 图片,相对地址或绝对地址都可以。该地址会受到preserve_relative_urls属性的影响,遵从与upload_url一样的规则。 该背景图片必须是一个sprite图片,从上到下包含了Flash按钮的正常、鼠标悬停、按下、禁用这四种状态。因此该图片的高度应该是Flash按钮高度的四倍 | button_width@H_403_49@button_height@H_403_49@ | 图片高度的1/4 | button_text@H_403_49@文字,也可以是HTML代码 | button_text_style@H_403_49@文字的样式,使用方法见示例 | button_text_top_padding@H_403_49@button_text_left_padding@H_403_49@ | button_disabled@H_403_49@ | button_cursor@H_403_49@ | button_window_mode@H_403_49@ | 属性,可用值为SWFUpload.WINDOW_MODE里定义的常量 | file_dialog_start_handler@H_403_49@函数 | file_queued_handler@H_403_49@函数 | file_queue_error_handler@H_403_49@函数 | file_dialog_complete_handler@H_403_49@函数 | upload_start_handler@H_403_49@函数 | upload_progress_handler@H_403_49@函数 | upload_error_handler@H_403_49@函数 | upload_success_handler@H_403_49@函数 | upload_complete_handler@H_403_49@函数 |
---|
二、各种事件说明
三、swfupload实例的方法
四、文件信息对象 File Object
在事件监听函数中,经常要用到文件信息对象来获取文件的信息以供下一步的操作
403_49@ | 403_49@ | 文件id,用来控制文件的上传 | index@H_403_49@文件的索引,用在getFile(i)方法中 | name@H_403_49@文件的原始名称,不包括路径 | type@H_403_49@文件类型 | creationdate@H_403_49@文件的创建日期 | modificationdate@H_403_49@文件的最后修改日期 | filestatus@H_403_49@文件的状态,详细的请参照SWFUpload.FILE_STATUS中定义的常量 |
---|
五、队列状态对象 Stats Object
用来获取当前队列的状况
403_49@ | 403_49@ | 文件正在上传中 | files_queued@H_403_49@上传队列中的文件数量 | successful_uploads@H_403_49@上传(指触发了uploadSuccess事件)的文件数量 | upload_errors@H_403_49@上传失败的文件数量(包括被取消上传的文件) | upload_cancelled@H_403_49@上传的文件数量 | queue_errors@H_403_49@文件数量 |
---|
六、一些常量
定义的一些常量,便于理解
403_49@ | 页面上所有的SWFUpload实例的引用的集合,用SWFUpload实例的movieName属性进行索引 | SWFUpload.movieCount@H_403_49@页面上存在的SWFUpload实例的数量 | @H_403_49@SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED@H_403_49@ | 用户选取的文件超过了允许的数量 | SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT@H_403_49@文件的体积超过了允许的大小 | SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE@H_403_49@文件是空的 | SWFUpload.QUEUE_ERROR.INVALID_FILETYPE@H_403_49@文件类型 | @H_403_49@SWFUpload.UPLOAD_ERROR.HTTP_ERROR@H_403_49@ | SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL@H_403_49@ | SWFUpload.UPLOAD_ERROR.IO_ERROR@H_403_49@ | 文件时发生错误 | SWFUpload.UPLOAD_ERROR.SECURITY_ERROR@H_403_49@上传受到了安全方面的限制 | SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED@H_403_49@上传的文件数量超过了允许的最大值 | SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED@H_403_49@上传出现错误 | SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND@H_403_49@方法传入的文件id不存在 | SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED@H_403_49@方法中返回了false | SWFUpload.UPLOAD_ERROR.FILE_CANCELLED@H_403_49@上传被取消了 | SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED@H_403_49@上传被终止了 | @H_403_49@SWFUpload.FILE_STATUS.QUEUED@H_403_49@ | 文件正在队列中等待上传 | SWFUpload.FILE_STATUS.IN_PROGRESS@H_403_49@文件正在上传 | SWFUpload.FILE_STATUS.ERROR@H_403_49@文件在添加到队列或是上传的时候出现了错误 | SWFUpload.FILE_STATUS.COMPLETE@H_403_49@文件已上传成功 | SWFUpload.FILE_STATUS.@H_403_49@文件被取消上传 | @H_403_49@SWFUpload.CURSOR.ARROW@H_403_49@ | 显示 | SWFUpload.CURSOR.HAND@H_403_49@显示 | @H_403_49@SWFUpload.WINDOW_MODE.WINDOW@H_403_49@ | 显示在页面的所有dom元素上面 | SWFUpload.WINDOW_MODE.OPAQUE@H_403_49@SWFUpload.WINDOW_MODE.TRANSPARENT@H_403_49@ | 显示 |
---|
内容太多了,感觉有点乱了,如果还不清楚怎么使用,建议看下官网的使用流程,明白怎么使用后再来看这些属性、事件、方法、常量什么的吧。