我有点难以理解这一点。
我正在创建一个Air / Flash应用程序,用于将文件从本地目录上传到服务器。(无需用户交互)。 我正在创建文件夹中找到的文件数组,并且可以正常上传它们而不会出现任何问题。 但是,我无法跟踪事件监听器;意思是,for循环显然在每次上传的事件监听器之前完成。
有没有办法跟踪事件监听器并找出最后一个监听器何时完成?
非常感谢任何帮助...
这是我的代码:
public var UPLOAD_URL:String = "http://myhost/dev/uptest.php";
upbtn.addEventListener(MouseEvent.CLICK, uploadme);
public function uploadme(event:MouseEvent):void
{
preloader.visible = true;
var desktop:File = File.applicationStorageDirectory.resolvePath("photo");
var files:Array = desktop.getDirectoryListing();
for (var i:uint = 0; i < files.length; i++)
{
var date:Date = new Date(); // get new date
var mytime:Number = Math.round(date.valueOf()/1000);
var ur:URLRequest = new URLRequest();
var uv:URLVariables = new URLVariables();
uv.filename = files[i].name;
ur.data = uv;
ur.method = URLRequestMethod.POST;
ur.url = UPLOAD_URL;
files[i].addEventListener(ProgressEvent.PROGRESS, updateProgress);
files[i].addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, doneUpload);
files[i].addEventListener(IOErrorEvent.IO_ERROR, fileError);
files[i].upload(ur);
//trace(i)
function updateProgress(event:ProgressEvent):void
{
//wait preloader.visible = true;
//trace(event.currentTarget.name);
}
function doneUpload(event:DataEvent):void
{
//var loader2: URLLoader = URLLoader(event.target);
//trace(i);
trace(event.data);
//preloader.visible = false;
}
function fileError(event:IOErrorEvent):void
{
trace("error");
}
}
}
答案 0 :(得分:2)
一种方法是跟踪您上传的文件数量,并且只有在所有文件完成后才会在doneUpload
侦听器中执行操作:
private var numFiles:int = 0;
public function uploadme(event:MouseEvent):void
{
...
var files:Array = desktop.getDirectoryListing();
numFiles = files.length;
for (var i:uint = 0; i < files.length; i++)
...
}
function doneUpload(event:DataEvent):void
{
//var loader2: URLLoader = URLLoader(event.target);
//trace(i);
trace(event.data);
numFiles--;
if (numFiles == 0) {
trace("All the files are done uploading.");
}
//preloader.visible = false;
}