Загрузка произвольных данных в HTTP Post во Flex - PullRequest
2 голосов
/ 03 февраля 2009

В настоящее время у нас есть Java-апплет, который генерирует много данных и загружает их на наши серверы. Один из методов загрузки, который у нас есть, - это использование HTTP POST на нашем сервере, содержимое которого представляет собой только необработанные данные (без многочастного кодирования или чего-либо еще).

Я смотрю на реализацию приложения Flex, которое делает то же самое, но я не вижу способа дублировать такое поведение сети. Кажется, что все связанные с HTTP сетевые классы в Flex работают при условии, что вы просто делаете запрос. Я не вижу способа фактически установить полезную нагрузку POST (кроме установки нескольких параметров запроса, которые здесь не будут работать).

Что я действительно хотел бы, так это иметь возможность инициировать HTTP POST, но затем иметь возможность записи в соединение, как если бы я был сокетом. Возможно ли это без необходимости писать собственную реализацию HTTP поверх класса Socket? Есть ли способ установить полезную нагрузку HTTP POST во Flex?

Уточнение: достаточно создать буфер данных и отправить его на сервер (что, похоже, возможно). Было бы лучше, если бы я мог рассматривать соединение как сокет и отправлять ему данные со временем, а не сразу, но это не обязательно.

1 Ответ

2 голосов
/ 03 февраля 2009

Звучит так, будто вы задаете два вопроса. Да, есть способ установить полезную нагрузку HTTP POST во Flex и загрузить файлы любого формата на ваш сервер:

private function doPost():void
{
    var yourData:ByteArray = new ByteArray();
    var encoder:Base64Encoder = new Base64Encoder();

    for (var i:int = 0; i < 10000; i++)
        yourData.writeByte(i);

    yourData.position = 0;
    encoder.encodeBytes(yourData);

    var req:URLRequest = new URLRequest("http://yourdomain.com/yourservice.ext");
    req.method = URLRequestMethod.POST;

    var postData:URLVariables = new URLVariables();
    postData.userData = encoder.flush();

    req.data = postData;

    var loader:URLLoader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.BINARY;
    loader.addEventListener(Event.COMPLETE, loader_complete);
    loader.load(req);
}

private function loader_complete(event:Event):void
{
    trace("Upload complete!");
}

... но это также звучит так, как будто вы хотите подключиться, оставьте соединение открытым, а затем напишите в него произвольно «как сокет»; если это так, то, кроме использования классов Socket для этой цели, я не верю, что есть встроенный механизм, нет. Надеюсь, это поможет, тем не менее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...