2014-10-03 42 views
1

當我使用FileReference類的Download方法時,在桌面和Android上一切正常,但我在iOS上遇到錯誤。iOS上的Adobe空氣 - FileReference下載錯誤

這是代碼:

var req = new URLRequest(url); 
var localRef:FileReference = new FileReference(); 
localRef.download(req); 

在iOS上,我得到一個警告:不支持

下載錯誤
文件下載。

我已經試過NavigateToUrl(),它會要求將文件保存在Dropbox或其他應用程序中。

我該如何解決這個錯誤?

回答

4

你不應該在移動設備上使用FileReference(或者AIR,雖然它在桌面上打開了加載/保存對話框,所以可以在那裏使用)。您應該使用FileFileStream,這使您可以更好地控制文件系統。

在這種情況下,您可以嘗試使用File.download()並將其保存到File.applicationStorageDirectory,但我不知道它是否會有任何區別,因爲它會延伸FileReference

我通常所做的是使用URLStream而不是URLLoader。通過它可以訪問到你正在下載的文件的原始字節,然後用FileFileStream

因此,像(這是未經測試過我的頭頂,雖然我已經使用過類似的):

var urlStream:URLStream = new URLStream(); 
urlStream.addEventListener(Event.COMPLETE, completeHandler); 
urlStream.load(new URLLoader('url'); 

function completeHandler(e:Event):void { 
    var bytes:ByteArray = new ByteArray(); 
    urlStream.readBytes(bytes); 

    var f:File = File.applicationStorageDirectory.resolvePath('filename'); 
    var fs:FileStream = new FileStream(); 
    fs.open(f, FileMode.WRITE); 
    fs.writeBytes(bytes); 
    fs.close(); 
} 

現在,顯然還有更多你想要考慮的(錯誤,進度等)。然而,這應該足以讓你指向正確的方向。

可以使用此方法創建完整的下載管理器(兩年前我爲iOS項目所做的工作),因爲您可以隨時保存到文件系統,而不必等到Event.COMPLETE觸發(使用ProgressEvent.PROGRESS事件)。這樣可以避免在內存中擁有500MB文件,這是大多數設備無法處理的。