0

我试图通过 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());
}

这是解决问题的正确方法吗?有现成的解决方案吗?我很想听听反馈。

谢谢,

卡尔提克

4

2 回答 2

1

使用resultFormat = textonHTTPService然后创建一个新的ByteArray并调用writeUTFBytes将文本从HTTPService结果写入ByteArray. 然后您应该可以将其设置ByteArray为 aSWFLoader.source或 call Loader.loadBytes

于 2009-12-30T16:04:01.727 回答
0

我已经使用 AIR 1.5 应用程序尝试了 James 的解决方案,但是当我在 SWFLoader.source 上设置 ByteArray 时出现以下错误。有任何想法吗?我以为我在某处读到 AIR 更改了 HTTP 标头,这可能是原因吗?谢谢本。

[DEBUG] mx.messaging.Channel 'direct_http_channel' channel sending message: (mx.messaging.messages::HTTPRequestMessage)#0 body = (Object)#1 clientId = (null) contentType = "application/x-www-form-urlencoded" destination = "DefaultHTTP" headers = (Object)#2 httpHeaders = (Object)#3 messageId = "3044E76C-CF0E-2D5F-96BE-74CFF62098B0" method = "GET" recordHeaders = false timestamp = 0 timeToLive = 0 url = "http://www.myurl.com/test.jpg" [INFO] mx.messaging.Producer '4FA2CCF4-2B3E-4EAB-2873-74CFF612AA72' 生产者已连接。[INFO] mx.messaging.Producer '4FA2CCF4-2B3E-4EAB-2873-74CFF612AA72' 生产者确认'3044E76C-CF0E- 2D5F-96BE-74CFF62098B0'. [INFO] mx.rpc.http.HTTPService 解码 HTTPService 响应 [DEBUG] mx.rpc.http.HTTPService 处理 HTTPService 响应消息:(mx.messaging.messages::AcknowledgeMes​​sage)#0 body = " ÿØÿà错误#2044:未处理的IOErrorEvent:。text=Error #2124: 加载的文件是未知类型。

于 2010-01-28T12:07:38.637 回答