下载Firebase存储文件设备问题

时间:2016-10-25 23:14:59

标签: swift download firebase-storage tmp

我正在尝试从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)")
    }

1 个答案:

答案 0 :(得分:3)

我认为这里的问题是tmpDocuments目录实际上不在/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试图在真实设备上做的那样,可以证明你是一个非常合适的人。)