中文的说明文档: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博客 ” ,链接:http://blog.itpub.net/200919/viewspace-1029245/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/200919/viewspace-1029245/