我试图通过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());
}
这是解决问题的正确方法吗?有现有的解决方案吗?我很想听到反馈意见。
谢谢,
KARTHIK
答案 0 :(得分:1)
使用resultFormat = text
上的HTTPService
,然后创建新的ByteArray
并致电writeUTFBytes
,将HTTPService
结果中的文字写入{{ 1}}。然后,您应该可以将ByteArray
设置为ByteArray
或致电SWFLoader.source
。
答案 1 :(得分:0)
我已经尝试过使用AIR 1.5应用程序的解决方案James,但是当我在SWFLoader.source上设置ByteArray时出现以下错误。有任何想法吗?我以为我读过AIR更改HTTP标头的地方,这可能是原因?谢谢Ben。
[DEBUG] mx.messaging.Channel'direct_http_channel'频道发送讯息: (mx.messaging.messages :: HTTPRequestMessage)#0 body =(对象)#1 clientId =(null) contentType =“application / x-www-form-urlencoded” destination =“DefaultHTTP” headers =(Object)#2 httpHeaders =(对象)#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 :: AcknowledgeMessage的)#0 body =“ÿØÿà 错误#2044:未处理的IOErrorEvent:。 text =错误#2124:加载的文件是未知类型。