Загрузите файл PDF во Flex с помощью HTTPService - PullRequest
0 голосов
/ 09 сентября 2011

Привет
Кто-нибудь знает, как загрузить файл pdf с помощью HTTPService?
Я делаю это

private function downloadPDF():void
{
    var httpService:HTTPService = new HTTPService();
    httpService.url = "http://coenraets.org/flexandroid90/FlexAndroid90Minutes.pdf";
    httpService.addEventListener(ResultEvent.RESULT, result);
    httpService.addEventListener(FaultEvent.FAULT, fault);
    httpService.send();
}

private function fault(event:FaultEvent):void
{
    trace("Error");
    trace("\t> Code : "+event.fault.faultCode);
    trace("\t> Description : "+event.fault.faultString);
    trace("\t> Detail : "+event.fault.faultDetail);
}

private function result(event:ResultEvent):void
{
    var pdfFile:File = new File(File.applicationStorageDirectory.nativePath + File.separator + "myPDF.pdf");
    var fileStream:FileStream = new FileStream();
    fileStream.open(pdfFile, FileMode.WRITE);
    fileStream.writeUTFBytes(event.result as String);
    fileStream.close();
}

Но я получил ошибку

Error
Код: Client.CouldNotDecode
Описание: Ошибка # 1090: ошибка синтаксического анализатора XML: элемент поврежден.
Деталь: нуль

С URLLoader работает нормально

private function initPDF():void
{
    loader = new downloadPDF();
    loader.dataFormat = URLLoaderDataFormat.BINARY;
    var request:URLRequest = new URLRequest("http://coenraets.org/flexandroid90/FlexAndroid90Minutes.pdf");
    configureListeners(loader);
    try {
        loader.load(request);
    } catch (error:Error) {
        trace("Unable to load requested URL.");
    }
}

private function configureListeners(dispatcher:EventDispatcher):void {
    dispatcher.addEventListener(Event.COMPLETE, completeHandler);
    dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}

private function completeHandler(event:Event):void {
    var pdfFile:File = new File(File.applicationStorageDirectory.nativePath + File.separator + "myPDF.pdf");
    var fileStream:FileStream = new FileStream();
    fileStream.open(pdfFile, FileMode.WRITE);
    fileStream.writeBytes(loader.data);
    fileStream.close();
}

private function ioErrorHandler(event:IOErrorEvent):void {
    trace("ioErrorHandler: " + event);
}

Ответы [ 2 ]

1 голос
/ 10 сентября 2011

Конечно, вы можете.

Вам просто нужно добавить
httpService.resultFormat="text"

Это просто даст вам строковый ответ, не анализируя его как xml. Хотя это и не рекомендуется, потому что HTTPService предназначен для WebServices, это МОЖЕТ быть сделано

0 голосов
/ 09 сентября 2011

Дело в том, что вы не можете загрузить что-то, не являющееся текстом или XML (то есть текстом), используя HTTPLoader.

...