《swfupload》是一款基于操作系统开发的文件传输软件。借助该软件,开发者和使用者能以更完善的方式进行文件上传与下载,相较以往模式,操作变得更为快捷便利。开发者还能运用xhtml、css和javascript随心所欲地定制其在浏览器中的外观。
1. 可实时显示上传进度
2. 具备良好的浏览器兼容性
3. 支持同时上传多个文件
4. 实现类似ajax的无刷新上传
5. 兼容flash 8和flash 9
6. 可与其他java script库(如jquery、prototype等)兼容
1. 为开发者提供丰富的事件接口
2. 能在浏览器端对要上传的文件进行限制
3. 采用flash上传,页面无刷新,且可自定义flash按钮样式
4. 允许一次上传多个文件,设有上传队列,队列内文件逐个上传,服务器端接收文件方式与普通表单上传相同
swfupload快速入门
新增一个上传页面,可放置在swfu目录下,也可按需存放,命名为tutor - 1.html。在页面的head部分插入引入swfupload.js的代码。
此外,还需一个swfupload占位符和一个上传按钮。占位符是用于在swfupload载入并初始化后被swfupload按钮替换的dom元素。
接着,载入并初始化swfupload.swf。至此,点击“点我选择文件”即可上传文件,操作十分简单。
这里仅提及几个常用的额外参数,其他细节可查阅汉化官方文档。
1. filedata:类似于表单上传控件的name属性,默认值为filedata。不建议修改,因为在linux系统的flash环境下修改无效。
2. post_params:post值,会连同上传的文件一同提交到服务器。该参数用途广泛,例如可用于验证用户是否有权限上传文件等,还能通过swfupload的addpostparam/setpostparams/removepostparam/addfileparam/removefileparam方法修改其值,在上传文件需额外提交表单信息时尤为实用。
3. requeue_on_error:是否将上传失败的文件重新添加到上传队列顶端,默认值为true。当文件上传失败或停止上传触发uploaderror事件时,若调用cancelupload方法触发该事件,文件将被丢弃,不会重新添加到队列中。
4. file_types:限制上传的文件类型,默认值为*.*。用户上传图片时可设置为”*.jpg;*.jpeg;*.gif;*.png;*.bmp;”。需注意,这只是浏览器端的限制,服务器端仍需验证文件类型,否则可能存在安全风险。
5. file_upload_limit:允许同时上传的文件数量,默认值为0,即不限制。当文件队列中的文件数、正在上传的文件数以及已上传成功的文件数之和超过该值时,将无法再添加文件。
6. file_queue_limit:允许队列中存在的文件数量,默认值为0,即不限制。当文件队列中的文件数超过该值时,将无法再添加文件。
7. button_action:点击swfupload按钮执行的动作,默认值为swfupload.button_action.select_files(多文件上传)
1. 首先引入相应的js文件
2. 实例化swfupload对象,并传入配置参数对象进行各项配置
3. 点击swfupload提供的flash按钮,弹出文件选取窗口,选择要上传的文件
4. 文件选取完成后,符合规定的文件将被添加到上传队列
5. 调用startupload方法启动队列中文件的上传
6. 文件上传过程中会触发相应事件,开发者可利用这些事件更新ui、处理错误、发出提示等
所上传的文件体积未超出swfupload设置的数值,但无法成功上传。通常这是由于服务器端的限制导致的,以apache + php为例,需修改php.ini中的post_max_size与upload_max_filesize两项设置。
在带有session验证的网站后台中,swfupload无法正常工作。这是因为swfupload上传时会开辟新的session进程,与原有程序的session不一致,需要在上传时传递原有程序的sessionid以恢复正确的session。
关于swfupload上传中文文件名乱码的问题,实际上是编码问题。程序使用utf - 8编码,文件名传递时同样采用该编码,从而导致乱码或文件无法保存,只需修改接收文件的相关设置即可。
