2011-09-09 30 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分析器失敗:元素格式不正確。
詳細信息:空

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

HTTPService用於調用Web服務,該服務將以文本或XML形式返回數據。它實際上是一個查詢服務器(不是數據庫,不要誤會我)。 爲什麼要使用服務而不是常規URLLoader? – Exort

+0

如果可能,我被要求使用HTTPService。但我會使用URLLoader – Snote

+1

@Snote,你也可以通過HTTPService獲取二進制數據,查看我的回答 –

回答

-1

的事情是,你不能下載東西是不是文本或XML(因此,它的文本)使用HTTPLoader。

1

當然可以。

你只需要添加
httpService.resultFormat="text"

這將只是給你的字符串應答,而不分析它爲XML。雖然不推薦,因爲HTTPService是用於WebServices,但它可以完成

+1

+1是的,HTTPService有不同的目的。如果您打算加載二進制文件,請改用URLLoader。使用HTTPService可能會比你需要的更多地實例化。誰告訴你使用HTTPService需要知道區別。 –

+0

當二進制資源位於客戶端不能直接訪問的其他主機上時,HTTPService可能非常有用。它是一種廉價且快速的代理服務方式,可以在不依賴真實外部代理的情況下提供這些資源。 –