Как заставить URLLoader возвращать AsyncToken?
Я пытался извлечь двоичные данные через HTTP для своего приложения Flex и столкнулся с некоторыми препятствиями. HTTPService, похоже, плохо справлялся с двоичными данными, говорили люди, использующие URLLoader. Но URLLoader не имеет приятного интерфейса AsyncToken/IResponder, который предоставляет HTTPService.
Итак, я провел некоторый поиск и не смог найти никого, кто расширяет URLLoader для обеспечения такого рода функциональности. Я пошел вперед и сделал удар сам по себе: http://pastebin.com/d7369d0e0
По сути, он оборачивает URLLoader и AsyncToken и отображает события COMPLETE, IO_ERROR и SECURITY_ERROR из URLLoader в результаты / ошибки, которые возникают в 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());
}
Правильный ли это подход к проблеме? Существуют ли существующие решения? Я хотел бы услышать обратную связь.
Спасибо,
Картик
2 ответа
Использовать resultFormat = text
на HTTPService
а затем создать новый ByteArray
и позвонить writeUTFBytes
написать текст из HTTPService
результат к ByteArray
, Тогда вы должны быть в состоянии установить, что ByteArray
к SWFLoader.source
или позвоните по телефону Loader.loadBytes
,
Я опробовал ваше решение Джеймс с приложением AIR 1.5, но я получаю следующую ошибку, когда устанавливаю ByteArray на свой SWFLoader.source. Есть идеи? Я думал, что где-то читал, что AIR изменяет заголовки HTTP, и это может быть причиной? Спасибо Бен.
[DEBUG] mx.messaging.Channel 'direct_http_channel' канал, отправляющий сообщение: (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::AcknowledgeMessage)#0 body = "ÿØÿà Ошибка #2044: UnhandledOvent:. text= Ошибка #2124: загруженный файл неизвестного типа.