ITPub博客

首页 > IT基础架构 > 网络安全 > SWFUpload文件上传

SWFUpload文件上传

原创 网络安全 作者:aywrenyue 时间:2009-12-01 16:18:49 0 删除 编辑
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4

官方网址:http://swfupload.org/

中文的说明文档:http://www.v-sky.com/doc/swfupload/v2.1.0/Documentation.html (Version2.1.0)

SWFupload是利用flash上传文件的,支持多文件上传,SWFupload的多文件上传是发送多个Http请求,每一个请求发送一个文件,每一个文件可以携带自己的file parameters,在这个项目中这个file parameters可以为重命名文件名。

在中文文档中描述的很清楚,文件在被选择进队列到上传成功,文件状态的变迁。在每一个过程中应该处理什么,会触发那个函数,文档中描述比较清楚。

我主要描述一下在项目中遇到的问题:

1、 flash上传文件的Cookie bug。

a) 先说一下我们的项目结构吧,所有的受保护请求都被一个拦截器(Inspector)拦截,在拦截器中判断用户的合法性。

b) 在非IE内核的浏览器中发送请求时,flash将非持久性的cookie(这个不知道怎么理解,可能是每一个请求所带的cookie吧,不是通过server显式写到客户端的。)全部过滤掉,不给server发送,当然包括JSESSIONID,这样导致在Firefox等非IE内核的浏览器下无法上传文件。

c) 解决办法,将失去的这个JSESSIONID作为参数提交给server,重新加入对JSESSIONID的支持代码如下:

if(!jQuery.browser.msie)

{

var start = url.indexOf('doUpload.do') + 11;

url = url.substring(0, start) + ';jsessionid=' +Upload.getCookie('JSESSIONID') + url.substr(start);

}

Upload.getCookie = function(key)

{

var acookie = document.cookie.split("; ");

for(var i = 0; i < acookie.length; i++)

{

var arr = acookie[i].split("=");

if(key == arr[0] && arr.length > 1)

{

return unescape(arr[1]);

}

}

return '';

}

d) 这样既在请求的URL中加入JESSIONID,这里注意不能使用SWFupload的addPostParam方法。

2、 第二个大问题就是flash在上传的过程,将所有的文件类型全部格式化为一种:application/octet-stream,这样在解析过程中取不到实际的文件类型,这个问题目前还不知道如何解决,不过有一个比较笨的办法就是,把常用的那些文件的扩展名和 MIME TYPE做一个映射,根据客户端传上来的扩展名,获得MIME TYPE。但是这个方法存在很多缺陷,例如,客户端把txt扩展名手动更改为exe,这样,获得的类型其实是不准确的。

其他的在处理上传的过程中还是比较顺利的。因为项目最终还没有完成,暂时就写这么多吧!

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/200919/viewspace-1029245/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 一个公式
请登录后发表评论 登录
全部评论
  • 博文量
    9
  • 访问量
    142606