1

我正在尝试将图像从新的 Firebase 存储下载到本地文件。为此,我使用 Firebase在此处提供的示例。这是我的代码:

func getTumbnails(imageName: String) {
    // Create a reference to the file you want to download
    let tumbnailRef = storageRef.child("tumbs/\(imageName)")
    // Create local filesystem URL
    let localURL: NSURL! = NSURL(string: "file:///local/tumbnails/\(imageName)")

    // Download to the local filesystem
    let downloadTask = tumbnailRef.writeToFile(localURL) { (URL, error) -> Void in
        if (error != nil) {
            print(error)
        } else {
            let data = NSData(contentsOfURL: URL!)
            self.data = data!
            print(data)
        }
    }
}

但是,当我调用该函数时getTumbnails("image"),控制台会打印出以下错误:

Optional(Error Domain=FIRStorageErrorDomain Code=-13000 "发生未知错误,请检查服务器响应。" UserInfo={object=tumbs/Sunset.png, bucket=********.appspot.com, NSLocalizedDescription =发生未知错误,请检查服务器响应。ResponseErrorDomain=NSCocoaErrorDomain, NSFilePath=/local/tumbnails, NSUnderlyingError=0x137f629c0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not allowed"}, ResponseErrorCode=513})

我在 stackoverflow 上找到了这个问题,但这是一个不同的错误(响应代码 518,而我有 513),因为我直接使用示例代码,所以这应该可以工作。

有人可以帮帮我吗?

4

3 回答 3

4

这里的问题是您收到一个NSPOSIXErrorDomain错误,表明您无权写入文件file:///local/tumbnails/\(imageName),大概是因为该目录 ( /local) 不存在,即使存在,您也无权写入它。

我会查看文档以获取您可以写入的目录列表——您可能应该使用/Documents/tmp为此。

于 2016-05-31T16:20:50.660 回答
0

似乎您可能没有storageRef正确声明您的(即您的存储桶被称为bucket=yourbucket.appspot.com),或者您可能添加Firebase/Storage到您的workspace但没有更新Google-info.plist. 也许您可以显示更多代码?

更新:你可以试试

let localURL: NSURL! = NSURL.fileURLWithPath(string: "file:///local/tumbnails/\(imageName)")
于 2016-05-31T08:57:16.260 回答
0

可能是 iOS 9 的 App Transport Security,将此代码添加到您的info.plist并再次检查

   <key>NSAppTransportSecurity</key>
    <dict>
      <!--Include to allow all connections (DANGER)-->
      <key>NSAllowsArbitraryLoads</key>
          <true/>
    </dict>
于 2016-05-31T16:09:30.083 回答