当我使用 FileReference 类的 Download 方法时,在桌面和 Android 上一切正常,但在 iOS 上出现错误。
这是代码:
var req = new URLRequest(url);
var localRef:FileReference = new FileReference();
localRef.download(req);
在 iOS 上,我收到警报:
下载错误
不支持文件下载。
我已经尝试过 NavigateToUrl() 并要求将文件保存在 Dropbox 或其他应用程序中。
我该如何解决这个错误?
最佳答案
你不应该使用 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 的文件,这是大多数设备无法处理的。
关于ios - iOS 上的 Adobe air - FileReference 下载错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26176102/