您的位置主页 > 个人专区 > 个人习作 > Uploadify bug 追踪

Uploadify bug 追踪

2009-08-16    文章来源:互联网    浏览次数:1718

Uploadify 是个上传组件,有进度条功能,非常美观,官方网址:www.uploadify.com/

Uploadify虽然好看,但是bug不少

1,Firefox下Flash的cookie传递有问题,IE下正常

有人说,可以用session代替,但是,session也是用的cookie的机制啊,所以cookie传不上服务器,session照样不行。解决此问题,有网友提供代码,但是我却改不出来,代码如下:

as代码
  1. package project.util {
  2.  
  3. import com.klstudio.util.StringUtil;
  4. import flash.external.ExternalInterface;
  5.  
  6. public class UploadUtil{
  7.  
  8.     public function UploadUtil() {
  9.     }
  10.  
  11.     public static function fixNoIEBug(url:String):String {
  12.         var index:int = url.indexOf("?");
  13.         url += (index == -1)?"?ie=":"&ie=";
  14.         url += (isIE())?"1":"0" + getCookies();
  15.         return url;
  16.     }
  17.  
  18.     public static function isIE():Boolean {
  19.         if (!ExternalInterface.available) {
  20.             return true;
  21.         }
  22.         return ExternalInterface.call("navigator.appVersion.indexOf","MSIE") != -1;
  23.     }
  24.  
  25.     public static function getCookies():String {
  26.         if (!ExternalInterface.available) {
  27.             return "&c_userid=&c_password=";
  28.         }
  29.         var result:String = "";
  30.         var cookieStr:String = ExternalInterface.call("function(){return [removed];}");
  31.         var cookies:Array = cookieStr.split(';');
  32.         var count:uint = 0;
  33.         for (var i:uint = 0; i < cookies.length; i++ ) {
  34.             var items:Array = cookies[i].split('=');
  35.             if (StringUtil.trim(items[0]) == "c_userid" || StringUtil.trim(items[0]) == "c_password") {
  36.                 result += "&" + StringUtil.trim(items[0]) + "=" + StringUtil.trim(items[1]);
  37.                 count ++;
  38.             }
  39.             if (count >= 2) {
  40.                 break;
  41.             }
  42.             }
  43.             return result;
  44.         }
  45.  
  46.     }
  47.  
  48. }

原本我把上传路径存于cookie,然后直接使用cookie里面的路径作为上传路劲,但是这样不行,于是采用传参方式,但是问题又出来了

2,传递参数不能传Windows的物理路径

javascript代码
  1. $(document).ready(function() {
  2.     $("#uploadify").uploadify({
  3.         'uploader'       : 'scripts/uploadify.swf',
  4.         'script'         : 'scripts/uploadify.php',
  5.         'cancelImg'      : 'images/cancel.png',
  6.         'folder'         : 'c:/',
  7.         'queueID'        : 'fileQueue',
  8.         'auto'           : true,
  9.         'multi'          : true
  10.     });
  11. });

看到这个JavaScript,把c:/这个路径传到uploadify.php页面去,然后uploadify.php页面

$targetPath =  $_REQUEST['folder'];

获取到传过来的路径,把上传来的文件存到这个路径下,但是死活没能成功,但是用uploads却可以,于是联想到是不是as在作怪,还好uploadify提供flash的源代码,打开uploadify.fla,可以看到以下代码

as代码
  1. // Get actual folder pathfunction
  2. function getFolderPath():String {
  3.     var folder:String = param.folder;
  4.     /*
  5.     if (param.folder.substr(0,1) != '/' && param.folder.substr(0,4) != 'http') {
  6.         folder = param.pagepath + param.folder;
  7.         var folderParts:Array = folder.split('/');
  8.         for (var i = 0; i < folderParts.length; i++) {
  9.         if (folderParts[i] == '..') {
  10.             folderParts.splice(i - 1, 2);
  11.         }
  12.     }
  13.     folder = folderParts.join('/');
  14.     }*/
  15.     return folder;
  16. }

可以看得出,确实是做了处理,解决办法就是想我以上代码,把那个出了的 if 块注释掉,至此,完美的运行Uploadify了。有兴趣的朋友可以试试。

  • 上一篇:IE与Firefox中Cookie域的不同
  • 下一篇:没有了
  • 文章评论(查看全部)

    验证码: 中评 好评 差评