Загрузка данных, отправленных на сервер в виде файла из Flex - PullRequest
2 голосов
/ 08 июля 2010

Это должно быть тривиально, и я почти уверен, что делал это раньше.

Я пытаюсь отправить данные на сервер и вернуть их мне при загрузке файла, запрашивая окно загрузки файла из собственного браузера.Я знаю, что серверная часть работает просто отлично, потому что я могу публиковать из демо-веб-формы, но когда я запускаю следующий код Flex 3, я даже не могу получить запрос на запуск.

var fileRef:FileReference = new FileReference();
private function saveXmlAsFile(event:MouseEvent):void
{                           
    var fileRequest:URLRequest = new URLRequest();
    fileRequest.method = URLRequestMethod.POST;
    fileRequest.url = "http://foo.com/dataBounce";

    var urlVariables:URLVariables = new URLVariables();             
    urlVariables.content = "Test content to return" ; 
    // fileRequest.contentType = "application/x-www-form-urlencoded ";

    urlVariables.fileName = "test.xml";

    fileRef.addEventListener(SecurityEvent.ALL, onSecurityError);
    fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError2);
    fileRef.addEventListener(IOErrorEvent.NETWORK_ERROR, onNetworkError);
    fileRef.addEventListener(Event.COMPLETE, onComplete);

    try
    {
        fileRef.download(fileRequest, "test.xml");
    }catch(error:Error) {
        model.logger.error("unable to download file");
    }       
}

Обратите внимание, что когда вызывается файл fileRef.download, я не вижу никаких запросов по сети с использованием традиционных инструментов браузера Firebug или HTTPWatch.

РЕДАКТИРОВАТЬ:Я должен добавить, что это для

Есть предложения?Благодаря.

Ответы [ 3 ]

0 голосов
/ 08 июля 2010

Ваше объяснение довольно ясно, но когда я смотрю на ваш код, я чувствую, что что-то упустил.

Код выглядит так, как будто вы пытаетесь выполнить половину части загрузки и половину части загрузки.

Я думаю, что код, который вы в данный момент разместили, будет работать для запуска загрузки, если вы установите для .method значение GET. Я полагаю, вам также нужно будет включить имя файла как часть свойства .url.

Однако, чтобы опубликовать что-то и затем запустить загрузку, вам понадобятся две отдельные операции - операция публикации данных и затем операция их загрузки, которую, вероятно, следует вызывать из обработчика onComplete операции загрузки.

0 голосов
/ 08 июля 2010

ОК, полагаю, я выяснил, что происходит.

Когда вы не устанавливаете свойство URLRequest.data, по умолчанию для метода запроса устанавливается значение "GET".

Таким образом, рабочий код выглядит следующим образом: данные размещены в переменных URL-адреса:

private var fileRef:FileReference;
private function saveRawHierarchy(event:MouseEvent):void
{                                   
    var fileRequest:URLRequest = new URLRequest();
    fileRequest.method = URLRequestMethod.POST;
    fileRequest.url = "http://foo/bounceback";

    var urlVariables:URLVariables = new URLVariables();             
    urlVariables.content = "CONTENT HERE";
    urlVariables.fileName = "newFileName.xml";

    fileRequest.data = urlVariables;

    fileRef = new FileReference();                   
    fileRef.addEventListener(Event.COMPLETE, onComplete); 

    try
    {
        fileRef.download(fileRequest, "appHierarchies.xml");
    }catch(error:Error) {
        model.logger.error("unable to download file");
    }       
}

Не уверен, что было неправильно в том, что запрос не был выполнен ранее.

0 голосов
/ 08 июля 2010

Вам нужно добавить fileRef.upload для запуска загрузки.

Также я бы переместил оператор загрузки в onComplete, чтобы файл не запрашивался до его загрузки.

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