当我使用FileReference类的Download方法时,一切在桌面和Android上运行正常,但我在iOS上收到错误。
这是代码:
var req = new URLRequest(url);
var localRef:FileReference = new FileReference();
localRef.download(req);
在iOS上我收到提醒:
下载错误
不支持文件下载。
我已经尝试过NavigateToUrl(),并要求将文件保存在Dropbox或其他应用程序中。
如何解决此错误?
答案 0 :(得分:4)
你不应该在移动设备上使用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的文件,这是大多数设备无法处理的。