iOS上的Adobe Air - FileReference下载错误

时间:2014-10-03 08:59:21

标签: ios actionscript-3 air

当我使用FileReference类的Download方法时,一切在桌面和Android上运行正常,但我在iOS上收到错误。

这是代码:

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

在iOS上我收到提醒:

下载错误
不支持文件下载。

我已经尝试过NavigateToUrl(),并要求将文件保存在Dropbox或其他应用程序中。

如何解决此错误?

1 个答案:

答案 0 :(得分: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的文件,这是大多数设备无法处理的。