我正在尝试从Firebase存储中下载word文档。在模拟器上,一切都按预期工作。然而,在我的设备上,我收到以下错误:
可选(错误域= FIRStorageErrorDomain代码= -13000"发生未知错误,请检查服务器响应。" UserInfo = {object = 26 October 2016.docx,bucket = app.appspot.com ,NSLocalizedDescription =发生未知错误,请检查服务器响应。,ResponseErrorDomain = NSCocoaErrorDomain,NSFilePath = / tmp / bulletin,NSUnderlyingError = 0x1702590b0 {错误域= NSPOSIXErrorDomain代码= 1"操作不被允许"},ResponseErrorCode = 513})
我一直在关注的其他帖子似乎没有给我一个合适的答案,我所知道的是文件权限存在问题,即使我使用的是推荐目录(tmp)。
这是下载文件的代码
let Ref_Bulletin = Bulletin.referenceForURL("gs:/app.appspot.com/Bulletin/\(Today.stringFromDate(NSDate())).docx")
// Create local filesystem URL
let localURL: NSURL! = NSURL(string: "file:///tmp/today.docx")
// Download to the local filesystem
let downloadTask = Ref_Bulletin.writeToFile(localURL) { (URL, error) -> Void in
if (error != nil) {
print(error.debugDescription)
// Uh-oh, an error occurred!
} else {
print("Working As Expected")
self.Web_View.loadRequest(NSURLRequest(URL: localURL))
}
那是什么导致了这个问题,我该如何解决?
更新
所以我尝试创建目录,但我被告知即使文档说我可以写入tmp,我也没有获得许可。
无法创建目录错误域= NSCocoaErrorDomain代码= 513"您无权将文件“today.docx”保存在文件夹“h”中。" UserInfo = {NSFilePath = / tmp / h / today.docx,NSUnderlyingError = 0x1702498a0 {错误域= NSPOSIXErrorDomain代码= 1"操作不被允许"}}
这是创建目录的代码:
do {
try NSFileManager.defaultManager().createDirectoryAtPath(localURL.path!, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
NSLog("Unable to create directory \(error.debugDescription)")
}
答案 0 :(得分:3)
我认为这里的问题是tmp
和Documents
目录实际上不在/tmp
和/Documents
(例如,它看起来好像{ {1}}实际上是/Documents
,实际上是/User/Documents
,请参阅:https://www.theiphonewiki.com/wiki/)
您需要确保根据系统认为这些目录的位置创建文件URL,而不是字符串:
/private/var/mobile/Documents
或类似NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory()];
NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"my_file"] URLByAppendingPathExtension:@"txt"];
。至于为何在模拟器上运行:我认为这是因为模拟器上的沙盒与真实设备的工作方式不同,NSDocumentDirectory
显然是一个可以写入的有效位置(尽管可能不是你要写的两个,正如iOS试图在真实设备上做的那样,可以证明你是一个非常合适的人。)