+ -
当前位置:首页 → 问答吧 → FLASH多文件上传问题

FLASH多文件上传问题

时间:2011-09-27

来源:互联网

去网上找了个,但是有各种问题,本人主要做JS,不太懂AS,故请高手指点~
问题如下:
1.上传文件得不到正确的状态:
给FileReference注册事件addEventListener(ProgressEvent.PROGRESS, onProgress); 然后upload(new URLRequest(xxxxxx));
但是测试结果是这个触发不管文件有没有上传都会发生,本人认为这只是FLASH在读本地文件,而不是上传时发生的状态。

2.用了FileReferenceList.browse();可以选择多文件,然后循环去提交给PHP文件做处理,但是问题是上传文件总是少,比如选了4个可能只传了2个或3个,但是trace来看又的确是输出了4次,不知何故~

具体代码如下
AS3:
复制内容到剪贴板
代码:
var upload_btn:Sprite = new Sprite();
upload_btn.graphics.lineStyle(2,25,0.7);
/*
upload_btn.graphics.moveTo(0,0);
upload_btn.graphics.lineTo(100,0);
upload_btn.graphics.lineTo(100,60);
upload_btn.graphics.lineTo(0,60);
upload_btn.graphics.lineTo(0,0);
*/
upload_btn.graphics.beginFill(30,0.6);
upload_btn.graphics.drawRect(100,100,200,100);
upload_btn.graphics.endFill();
var str:TextField = new TextField();
str.text = "点击上传";
this.addChild(upload_btn);
upload_btn.addChild(str);
upload_btn.addEventListener(MouseEvent.CLICK,upload);
var fr:FileReference = new FileReference();
var frList:FileReferenceList = new FileReferenceList();
function upload(e:MouseEvent):void
{
    
    frList.browse();
    frList.addEventListener(Event.SELECT,startUpload);
    

}
function onProgress(evt:ProgressEvent):void
        {
            var percentLoaded:Number = evt.bytesLoaded/evt.bytesTotal;  
            percentLoaded = Math.round(percentLoaded * 100);   
            trace("Loading: "+percentLoaded+"%");
        }
function startUpload(e:Event):void
{
    var list:Array = frList.fileList;
    for(var i:Number = 0; i < list.length; i++) {
        fr = list[i];
        fr.addEventListener(ProgressEvent.PROGRESS, onProgress);
        fr.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,upok);
        fr.addEventListener(IOErrorEvent.IO_ERROR,ioerr);
        fr.upload(new URLRequest("http://198.198.198.143/123/fileupload.php"));
        trace(fr.name);
    }
    
    
    
    
    
}
function upok(e:DataEvent):void
{
    
    trace("upok"+e.data);
}
function ioerr(e:IOErrorEvent):void
{
    trace("ioerr"+e.target);
    }
PHP:
复制内容到剪贴板
代码:
<meta name="content-type" content="text/html;charset=utf-8">
<?php
    
    function getExt($filename)
    {
        $arr = pathinfo($filename);
        return $arr["extension"];
    }
    $flag = 0;
    if(isset($_FILES["Filedata"]))
    {
        $flag = move_uploaded_file($_FILES["Filedata"]["tmp_name"],"./upload/".date(YmdHms).".".getExt($_FILES["Filedata"]["name"]));
        if($flag)
        {
            echo "上传成功";
        }
        else
        {
            echo "上传失败";
        }
    }
?>

作者: ft284800   发布时间: 2011-09-27

1  ProgressEvent.PROGRESS没上传时不会触发。
2  不建议在for循环中同时上传N个,推荐依次上传,即一个上传完成,再上传下一个。

作者: flash023   发布时间: 2011-09-27