2013-09-16 60 views
0

我在Flex Web應用程序中使用PHP web服務進行查找,讀取內容,然後將Base64編碼數據作爲XML文檔的一部分發送回Flex應用程序。然後,Flex應用程序必須解壓縮Base64解碼字節流,然後直接將其發送給瀏覽器用戶(供下載),而無需將文件寫入磁盤。例如從Flex中的字節流開始下載文件

這一切都必須發生在點擊「立即下載」按鈕上。

我一直在尋找,但我一直在尋找的是從URL下載或實際將字節流寫入磁盤的例子,這是我不想要的。

我需要將流直接推送到瀏覽器。通過這種方式,我可以保持服務器上的文件不受Web空間的影響,而不是公開訪問。

任何人都可以幫忙嗎?

+0

我不理解你的問題或問題。是不是加載URL「直接向瀏覽器發送字節流」的行爲?要向瀏覽器發送「非網頁可訪問文件」,您必須編寫一些服務器端代碼 - 可通過網絡訪問 - 以加載文件並將字節流回。根據文件類型,不能保證該文件將顯示在瀏覽器中。這取決於文件類型和瀏覽器設置。例如,如果我的瀏覽器加載PDF,我可以選擇「打開」或「保存」,因爲這是我的瀏覽器設置的方式。 – JeffryHouser

回答

1

您可以將一個ByteArray彈出到Loader中,然後使用FileReference來啓動下載對話框。

var file:FileReference = new FileReference(); 
var loader:Loader = new Loader(); 
//put loader in binary mode 
loader.dataFormat = URLLoaderDataFormat.BINARY; 
loader.addEventListener(Event.COMPLETE, loader_completeHandler); 

//I will assume you are getting an appropriate ByteArray from your stream 
var data:ByteArray = new ByteArray(); 
loader.loadBytes(data); 

private function loader_completeHandler(evt:Event):void { 
    //now pop a save window 
    file.save(loader.data,"default_file_name.png") 
} 

編輯

我也會認爲你這樣做是爲了流通過非標準協議,如AMF文件,否則,你只會輸出的文件通過HTTP和讓瀏覽器手柄其餘的部分。

+0

謝謝。這幫助了很多! –