你不應該在移動設備上使用FileReference
(或者AIR,雖然它在桌面上打開了加載/保存對話框,所以可以在那裏使用)。您應該使用File
和FileStream
,這使您可以更好地控制文件系統。
在這種情況下,您可以嘗試使用File.download()
並將其保存到File.applicationStorageDirectory
,但我不知道它是否會有任何區別,因爲它會延伸FileReference
。
我通常所做的是使用URLStream
而不是URLLoader
。通過它可以訪問到你正在下載的文件的原始字節,然後用File
和FileStream
因此,像(這是未經測試過我的頭頂,雖然我已經使用過類似的):
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文件,這是大多數設備無法處理的。