Uploadify bug 追踪
2009-08-16 文章来源:互联网 浏览次数:1718
Uploadify 是个上传组件,有进度条功能,非常美观,官方网址:www.uploadify.com/
Uploadify虽然好看,但是bug不少
1,Firefox下Flash的cookie传递有问题,IE下正常
有人说,可以用session代替,但是,session也是用的cookie的机制啊,所以cookie传不上服务器,session照样不行。解决此问题,有网友提供代码,但是我却改不出来,代码如下:
- package project.util {
- import com.klstudio.util.StringUtil;
- import flash.external.ExternalInterface;
- public class UploadUtil{
- public function UploadUtil() {
- }
- public static function fixNoIEBug(url:String):String {
- var index:int = url.indexOf("?");
- url += (index == -1)?"?ie=":"&ie=";
- url += (isIE())?"1":"0" + getCookies();
- return url;
- }
- public static function isIE():Boolean {
- if (!ExternalInterface.available) {
- return true;
- }
- return ExternalInterface.call("navigator.appVersion.indexOf","MSIE") != -1;
- }
- public static function getCookies():String {
- if (!ExternalInterface.available) {
- return "&c_userid=&c_password=";
- }
- var result:String = "";
- var cookieStr:String = ExternalInterface.call("function(){return [removed];}");
- var cookies:Array = cookieStr.split(';');
- var count:uint = 0;
- for (var i:uint = 0; i < cookies.length; i++ ) {
- var items:Array = cookies[i].split('=');
- if (StringUtil.trim(items[0]) == "c_userid" || StringUtil.trim(items[0]) == "c_password") {
- result += "&" + StringUtil.trim(items[0]) + "=" + StringUtil.trim(items[1]);
- count ++;
- }
- if (count >= 2) {
- break;
- }
- }
- return result;
- }
- }
- }
原本我把上传路径存于cookie,然后直接使用cookie里面的路径作为上传路劲,但是这样不行,于是采用传参方式,但是问题又出来了
2,传递参数不能传Windows的物理路径
- $(document).ready(function() {
- $("#uploadify").uploadify({
- 'uploader' : 'scripts/uploadify.swf',
- 'script' : 'scripts/uploadify.php',
- 'cancelImg' : 'images/cancel.png',
- 'folder' : 'c:/',
- 'queueID' : 'fileQueue',
- 'auto' : true,
- 'multi' : true
- });
- });
看到这个JavaScript,把c:/这个路径传到uploadify.php页面去,然后uploadify.php页面
$targetPath = $_REQUEST['folder'];
获取到传过来的路径,把上传来的文件存到这个路径下,但是死活没能成功,但是用uploads却可以,于是联想到是不是as在作怪,还好uploadify提供flash的源代码,打开uploadify.fla,可以看到以下代码
- // Get actual folder pathfunction
- function getFolderPath():String {
- var folder:String = param.folder;
- /*
- if (param.folder.substr(0,1) != '/' && param.folder.substr(0,4) != 'http') {
- folder = param.pagepath + param.folder;
- var folderParts:Array = folder.split('/');
- for (var i = 0; i < folderParts.length; i++) {
- if (folderParts[i] == '..') {
- folderParts.splice(i - 1, 2);
- }
- }
- folder = folderParts.join('/');
- }*/
- return folder;
- }
可以看得出,确实是做了处理,解决办法就是想我以上代码,把那个出了的 if 块注释掉,至此,完美的运行Uploadify了。有兴趣的朋友可以试试。

文章评论(查看全部)