监视Actionscript 3中的文件上载进度

时间:2010-05-28 15:55:26

标签: flash actionscript-3

我正在尝试跟踪AS3中文件上传的进度,我的行为很奇怪。当我选择一个文件并上传它时,即使该文件是10兆字节或更多兆字节,进度也会立即100%,但它还没有完成。当文件真正完成上传时,onComplete事件将在大约30秒到几分钟后触发(取决于文件大小)。我在本地和服务器上测试过,行为是一样的。还有其他人经历过这个吗?非常令人沮丧......

否则,该文件正在上传。代码很简单:

myFileReference.addEventListener(ProgressEvent.PROGRESS, onUploadProgress);

function onUploadProgress(e:ProgressEvent) {
    var pctDone:Number = (e.bytesLoaded / e.bytesTotal) * 100;
    trace(pctDone);
}

4 个答案:

答案 0 :(得分:1)

我认为你不需要乘以100.如果我没记错的话,AS3中的进度条从0变为1.0

答案 1 :(得分:1)

好吧,当遇到类似的问题时,我发现了这个问题。我有一个多文件上传小程序。我正在监视两个进度:每个文件单独和文件总数。后者按预期工作,因为它是手动完成的,但第一种方式完全失败。添加跟踪会发现一种令人讨厌的行为:

protected function fileUploadProgress(event:ProgressEvent):void{
    var bytesTotal:uint = event.bytesTotal;
    var bytesLoaded:uint = event.bytesLoaded;
    progressBar_current.setProgress(bytesLoaded, bytesTotal);
    trace(bytesLoaded+ " / "+bytesTotal); 
}

327680 / 462357 
462357 / 462357 
398304 / 398304 
441478 / 441478 
457319 / 457319 
478448 / 478448

我的上传速度大约为500 kbps,因此每个文件需要几秒钟,但是除了第一个文件之外,在所有情况下都可以看到,每个文件只触发一个事件,并且在启动后立即触发,并且为100%。

更新更新:找到了!卸载AVG Antivirus后,进度事件以其应有的方式运行。一些患有NOD的人也遇到过同样的问题。所以这似乎是AV /防火墙应用程序的问题。 AVG Free没有包含防火墙,但它似乎仍然打破了上传。

答案 2 :(得分:0)

您的代码看起来不错!我认为没有任何理由不能按预期工作。

在文件引用上调用browse()方法之前或之后是否添加了事件侦听器?尝试切换订单,看看你是否运气好。

答案 3 :(得分:0)

我唯一能想到的是,e.bytesTotal可能没有正确初始化。也许尝试跟踪它来验证这个?

如果是这种情况,我怀疑问题在于您将文件数据传输到的任何服务器端技术(即,无论您传递给myFileReference.upload的URL是什么)。另请注意,FileReference.upload有两个可选参数可以帮助你,虽然根据我对它们的了解,我不认为它们与这个问题有很大关系。

祝你好运!

http://livedocs.adobe.com/flex/3/langref/flash/net/FileReference.html#upload%28%29