SWFUpload是一个客户端文件上传工具,如果传统的文件上传方式不能满足你的需求,那么可以试试看这个咯。
swfupload的功能:
- 在文件选择对话框中能够进行文件多选(当然还可以设置成单选)
- 可以设置上传对话框中显示的文件类型和说明
- 页面无刷新的上传(使用ajax方式post文件数据)
- 提供上传进度的事件回调,实时显示上传进度(这个比较cool,无需频繁调用服务端代码获取上传进度哦)
- 良好的浏览器兼容性
- 采用了命名空间以兼容其它JS的库 (例如 jQuery, Prototype, 等等)
- 对FLASH8和FLASH9播放器的支持
这里是swfupload的中文使用帮助,感谢译者的辛勤工作。
我第一次使用swfupload的时候,发现它和mootools的1.10版本有冲突:当IE7刷新或者关闭的时候会导致swfupload组件脚本出错,换用最新的mootools之后正常。
另外一个问题就是session,很多时候接收文件上传数据的代码需要根据当前session来进行权限处理。在IE中没什么问题,在firefox中会无法获取session,原因应该是flash处理cookie的方式有所不同,导致在firefox中swfupload无法post当前用户的cookie信息到服务端。解决方式也比较简单,就是自己获取cookie信息随着文件一并上传(flash9支持)即可。
asp.net中可以直接引用swfupload提供的global.asax来处理session信息,你只需要在创建swfupload对象的时候添加如下代码即可:
1 var swfu;
2 function initswfu()
3 {
4 swfu = new SWFUpload({
5 upload_url : "<%=Page.ResolveClientUrl("~/swfupload/upload.aspx")%>",
6 flash_url : "<%=Page.ResolveClientUrl("~/swfupload/swfupload_f9.swf")%>",
7 file_size_limit : "204800",
8 file_types : "*.rar;*.zip",
9 file_types_description : "打包文件",
10 post_params : {
11 "ASPSESSID" : "<%=Session.SessionID %>",
12 "AUTHID" : "<%=Request.Cookies[FormsAuthentication.FormsCookieName].Value%>"
13 },
14
2 function initswfu()
3 {
4 swfu = new SWFUpload({
5 upload_url : "<%=Page.ResolveClientUrl("~/swfupload/upload.aspx")%>",
6 flash_url : "<%=Page.ResolveClientUrl("~/swfupload/swfupload_f9.swf")%>",
7 file_size_limit : "204800",
8 file_types : "*.rar;*.zip",
9 file_types_description : "打包文件",
10 post_params : {
11 "ASPSESSID" : "<%=Session.SessionID %>",
12 "AUTHID" : "<%=Request.Cookies[FormsAuthentication.FormsCookieName].Value%>"
13 },
14
其中ASPSESSID是用户的sessionid,AUTHID是FormsAuthentication认证信息,如果你不用FormsAuthentication也可以去掉12行,当然如果你需要cookie中的其他自定义信息,就在这里添加并需要修改global.asax了。