Вопрос

Я пытался получить двоичные данные по протоколу HTTP для своего приложения Flex и столкнулся с некоторыми препятствиями.HTTPService, похоже, плохо справлялся с двоичными данными, люди говорили использовать URLLoader.Но URLLoader не имеет приятного интерфейса AsyncToken / IResponder, который предоставляет HTTPService.

Итак, я провел некоторый поиск и не смог найти никого, расширяющего URLLoader для предоставления такого рода функциональности.Я пошел дальше и попробовал это сделать сам: http://pastebin.com/d7369d0e0

По сути, он обертывает URLLoader и AsyncToken и сопоставляет ПОЛНЫЕ события, 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());
}

Правильно ли это подходит к проблеме?Существуют ли существующие решения?Я был бы рад услышать отзывы.

Спасибо,

Картик

Это было полезно?

Решение

Использовать resultFormat = text на HTTPService а затем создайте новый ByteArray и позвони writeUTFBytes написать текст из HTTPService результат для ByteArray.Тогда вы сможете установить это ByteArray к SWFLoader.source или позвоните по телефону Loader.loadBytes.

Другие советы

Я пробовал ваше решение, Джеймс, с приложением AIR 1.5, но я получаю следующую ошибку, когда устанавливаю ByteArray в моем SWFLoader.source.Есть какие-нибудь идеи?Мне казалось, я где-то читал, что AIR изменяет HTTP-заголовки, и это может быть причиной?Спасибо, Бен.

[ОТЛАДКА] mx.обмен сообщениями.Канал 'direct_http_channel', отправляющий сообщение по каналу:(mx.messaging.messages::HttpRequestMessage)#0 тело = (Объект) #1 Идентификатор клиента = (null) ContentType = "приложение /x-www-форма-urlencoded" назначение = "DefaultHTTP" заголовки = (Объект) #2 HttpHeaders = (Объект)#3 MessageId = "3044E76C-CF0E-2D5F-96BE-74CFF62098B0" метод = "ПОЛУЧИТЬ" Заголовки записей = false временная метка = 0 TimeToLive = 0 url = "http://www.myurl.com/test.jpg" [ИНФОРМАЦИЯ] mx.messaging.Производитель "4FA2CCF4-2B3E-4EAB-2873-74CFF612AA72" подключен к производителю.[ИНФОРМАЦИЯ] mx.обменсообщениями.Производитель "4FA2CCF4-2B3E-4EAB-2873-74CFF612AA72" подтверждает получение производителем "3044E76C-CF0E-2D5F-96BE-74CFF62098B0".[ИНФОРМАЦИЯ] mx.rpc.http.HTTPService Декодирование ответа HTTPService [ОТЛАДКА] mx.rpc.http.HTTPService Обработка ответного сообщения HTTPService:(МХ.системы обмена сообщениями.сообщений::AcknowledgeMessage)#0 кузов = "ÿØÿà Ошибка #2044:Необработанный IOErrorEvent:.текст= Ошибка #2124:Загруженный файл неизвестного типа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top