gpt4 book ai didi

actionscript-3 - 为什么在文件未完成加载时调度 URLStream 完成事件?

转载 作者:行者123 更新时间:2023-12-04 04:31:59 24 4
gpt4 key购买 nike

我正在编写一个 AIR kiosk 应用程序,它每晚都连接到 WordPress 服务器,获取一个包含所有内容路径的 JSON 文件,然后下载该内容并将其保存到 kiosk 硬盘上。

有数百个文件(jpg、png、f4v、xml),其中大部分都可以毫无问题地下载/保存。但是,有两个 f4v 文件从未完全下载。 complete 事件确实得到调度,但是如果我比较 bytesTotal(来自 progress 事件)与 bytesAvailable(来自 complete 事件)它们不匹配; bytesTotal 更大。 bytesTotal(来自进度事件)与服务器上的字节匹配。

progress 事件中的 bytesLoaded 永远不会增加到与 bytesTotal 匹配的程度,所以我也不能依赖 progress 事件。这似乎每次都发生在相同的两个视频上。视频不是很大,一个13MB,一个46MB。我有更大的视频,可以毫无问题地下载。

编辑:重新启动计算机后,这两个视频现在已完成下载,但我在 300kb 的 png 文件中遇到了同样的问题。

如果我将 url 粘贴到 Firefox 中,它会正确下载。我还编写了一个简单的 c# 应用程序来下载文件,它可以毫无问题地下载它们,所以这似乎是 Flash/AIR 的问题。

编辑:这是一个更简单的代码版本,它来自一个测试项目,并且是唯一的代码(该 url 在我们的本地网络上,因此您无法自己下载该文件):

package  {

import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
import flash.net.URLStream;

[SWF(backgroundColor="#000000", frameRate="24", width="640", height="480")]

public class Test extends Sprite {

private var fileSize:Number;
private var stream : URLStream;
private var url:String = "http://192.168.150.219/wordpress2/wp-content/uploads/2012/12/John-Butler-clip1.f4v";

public function Test() {
if (stage)
init();
else
this.addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event=null):void {
this.removeEventListener(Event.ADDED_TO_STAGE, init);
stream = new URLStream();
stream.addEventListener(ProgressEvent.PROGRESS, onLoadProgress);
stream.addEventListener(Event.COMPLETE, onLoadComplete);
stream.load(new URLRequest(url));
}

private function onLoadProgress(event:ProgressEvent):void {
fileSize = event.bytesTotal;
var percent:Number = event.bytesLoaded / event.bytesTotal * 100;
trace(percent + "%"); // this never gets to 100%
}

private function onLoadComplete(event:Event):void {
trace("loaded", stream.bytesAvailable, "of", fileSize);
// outputs "loaded 13182905 of 13184365"
// so why is it "complete" when it isn't fully downloaded?
}
}
}

最佳答案

不要与 bytesAvailable 进行比较,而是使用 length。 BytesAvailable 实际上是 ByteArray.length - ByteArray.position。因此,如果 ByteArray 中的位置已远离索引 0,则 bytesAvailable 值将减小。长度将始终是数组中的字节总数。

尝试使用长度进行比较,看看是否有任何区别。我没有时间筛选您的代码以查看您是否在任何时候改变位置(有意或无意;您可以通过多种方式来实现),所以这是我现在能提供的最好的。

关于actionscript-3 - 为什么在文件未完成加载时调度 URLStream 完成事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14493278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com