2011-09-09 14 views
0

こんにちは
HTTPServiceでPDFファイルをダウンロードする方法を知っていますか?
私はエラーHTTPServiceを使用してFlexでPDFファイルをダウンロード

を得た

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(); 
} 

しかし、それを行う

エラー
コード:Client.CouldNotDecode
説明:エラー#1090:XMLパーサエラー:要素が不正な形式です。
詳細:

ヌルそれは罰金

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); 
} 
+0

HTTPServiceは、テキストまたはXML形式のデータを返すWebサービスを呼び出すために使用されます。実際にはサーバーへのクエリです(データベースではなく、間違ってもいけません)。 通常のURLLoaderの代わりにサービスを使用する理由を教えてください。 – Exort

+0

可能であれば、私はHTTPServiceの使用を依頼しています。しかし、私はURLLoader – Snote

+1

@Snoteを使用し、HTTPServiceでバイナリデータを取得することもできます。私の答えを確認してください。 –

答えて

-1

事を作品URLLoaderクラスでは、テキストまたはXML(そう、それはテキストがあります)HTTPLoaderを使用していない何かをダウンロードすることはできませんです。

1

もちろん可能です。

あなたはただこれは単なるXMLとしてそれを解析することなく、あなたの文字列の応答が得られます
httpService.resultFormat="text"

を追加する必要があります。 HTTPServiceはWebService用であるため推奨されませんが、実行できます

+1

+1ええ、HTTPServiceは別の目的を持っています。バイナリをロードする場合は、代わりにURLLoaderを使用してください。 HTTPServiceを使用すると、必要以上にインスタンス化する可能性があります。 HTTPServiceを使用するように指示した人は、その違いを知る必要があります。 –

+0

HTTPServiceは、バイナリリソースがクライアントから直接アクセスできない別のホストにある場合に便利です。実際の外部プロキシに依存することなくこれらのリソースをプロキシして提供するための安価で迅速な方法です。 –

関連する問題