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

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

谢谢,

卡蒂克

有帮助吗?

解决方案

使用resultFormat = textHTTPService,然后创建一个新的ByteArray并呼吁writeUTFBytes写从HTTPService结果到ByteArray文本。然后,你应该能够到ByteArray设置为SWFLoader.source或致电Loader.loadBytes

其他提示

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

[DEBUG] mx.messaging.Channel 'direct_http_channel' 通道发送消息:(mx.messaging.messages :: httprequestmessage)#0 hody =(object)#1 clientId =(null)contentType =“ application/x-www-form-urlencoded” destinaty =“ dectitation =“ defaulthttp” defaulthttp“ =(object)#3 messageID =“ 3044e76c-cf0e-2d5f-96be-74CFF62098B0” method =“ get” recordheaders = false timestamp = 0 TimEtolive = 0 url = 0http://www.myurl.com/test.jpg“ [info] mx.messaging.producer'4fa2ccf4-2b3e-4EAB-2873-74CFF612AA72'生产者连接。[信息] 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:。文本=错误#2124:加载的文件类型未知。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top