【发布时间】:2009-12-24 20:28:17
【问题描述】:
我试图通过 HTTP 为我的 Flex 应用程序检索二进制数据,但遇到了一些绊脚石。 HTTPService 好像不太好处理二进制数据,有人说用 URLLoader。但是 URLLoader 没有 HTTPService 提供的漂亮的 AsyncToken/IResponder 接口。
所以,我进行了一些搜索,但找不到任何扩展 URLLoader 来提供这种功能的人。我自己尝试了一下:http://pastebin.com/d7369d0e0
基本上,它包装了一个 URLLoader 和一个 AsyncToken,并将来自 URLLoader 的 COMPLETE、IO_ERROR 和 SECURITY_ERROR 事件映射到在 AsyncToken 上引发的结果/错误。
基本用法:
var tidbitLoader:AsyncURLLoader = new AsyncURLLoader();
tidbitLoader.dataFormat = URLLoaderDataFormat.BINARY;
var asyncToken:AsyncToken = tidbitLoader.load(new URLRequest("http://localhost/SampleTidbit.swf"));
asyncToken.addResponder(this);
public function result(resultEvent:Object):void
{
trace("result");
}
public function fault(faultEvent:Object):void
{
var fault:FaultEvent = faultEvent as FaultEvent;
trace("fault: " + fault.toString());
}
这是解决问题的正确方法吗?有现成的解决方案吗?我很想听听反馈。
谢谢,
卡提克
【问题讨论】:
-
所以你要读取的二进制数据是SWF?但是您不想只运行 SWF(就像 SWFLoader 或 Loader 一样)?您是否尝试使用 HTTPService 并将 resultFormat 设置为文本?
-
嗨詹姆斯,我确实尝试使用 HTTPService 和 resultFormat 作为文本,但是当我将 SWFLoader.source 设置为该调用的结果时,SWF 不会加载!当我用我的 AsyncURLLoader 尝试它并返回一个 ByteArray 时,它可以工作。
-
也许您需要尝试使用 writeUTFBytes 或其他方式创建一个 ByteArray?
-
为了关闭它,我在下面提出了一个更简洁的答案。
标签: apache-flex flash actionscript-3 urlloader asynctoken