Вы не должны использовать FileReference
на мобильном устройстве (или AIR, в общем, хотя он открывает диалоговое окно Load/Save на рабочем столе, поэтому там может быть какое-то использование). Вместо этого вы должны использовать 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
события). Это позволяет избежать использования 500 МБ-файла в памяти, чего не может обрабатывать большинство устройств.