我正在尝试跟踪AS3中文件上传的进度,我的行为很奇怪。当我选择一个文件并上传它时,即使该文件是10兆字节或更多兆字节,进度也会立即100%,但它还没有完成。当文件真正完成上传时,onComplete事件将在大约30秒到几分钟后触发(取决于文件大小)。我在本地和服务器上测试过,行为是一样的。还有其他人经历过这个吗?非常令人沮丧......
否则,该文件正在上传。代码很简单:
myFileReference.addEventListener(ProgressEvent.PROGRESS, onUploadProgress);
function onUploadProgress(e:ProgressEvent) {
var pctDone:Number = (e.bytesLoaded / e.bytesTotal) * 100;
trace(pctDone);
}
答案 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