2016-05-31 155 views
1

我試圖從新的Firebase存儲將圖像下載到本地文件。爲此,我使用Firebase提供的示例here。這是我的代碼:未從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")我收到以下錯誤打印到控制檯:發生

可選(錯誤域= FIRStorageErrorDomain代碼= -13000「未知錯誤, 「UserInfo = {object = tumbs/Sunset.png,bucket = ********。appspot.com,NSLocalizedDescription =發生未知錯誤,請檢查服務器響應。,ResponseErrorDomain = NSCocoaErrorDomain ,NSFilePath =/local/tumbnails,NSUnderlyingError = 0x137f629c0 {Error Domain = NSPOSIXErrorDomain Code = 1「Operation not permitted」},ResponseErrorCode = 513})

我發現this問題在這裏stackoverflow,但這是一個不同的錯誤(響應代碼518,而我有513),因爲我直接使用示例代碼,這應該只是工作。

有人可以幫我嗎?

回答

3

這裏的問題是,你得到一個NSPOSIXErrorDomain錯誤,表明您沒有權限寫入文件file:///local/tumbnails/\(imageName),可能是因爲該目錄(/local)不存在,即使它存在,您沒有權限寫信給它。

我想看一下the docs的目錄列表,你可以寫入 - 你應該使用/Documents/tmp

+0

謝謝!但是,這適用於模擬器,但不適用於實際設備。 –

+0

模擬器上的應用程序沙盒可能與設備上的運行方式不同 - 您在設備上遇到了哪些問題?這也可能是你在設備上擁有不同的權限,並且不能寫入'/ Documents'(你可能需要寫入你的用戶目錄或只是寫入/ tmp) –

+1

我已經試圖寫入'/ tmp'沒有成功:( –

0

好像你可能沒有正確申報您的storageRef(即你的水桶被稱爲bucket=yourbucket.appspot.com),或者可能是您添加Firebase/Storageworkspace但沒有更新Google-info.plist。也許你可以展示更多你的代碼?

更新: 你可以嘗試

let localURL: NSURL! = NSURL.fileURLWithPath(string: "file:///local/tumbnails/\(imageName)") 
+0

謝謝,但我已經正確設置了一切。出於安全原因,我將其更改爲'yourbucket.appspot.com',因爲我還沒有任何規則。 –

+0

也許你可以試試'讓localURL:NSURL! = NSURL.fileURLWithPath(字符串:「文件:///本地/ tumbnails/\(imageName)」) – Chris

+2

這不是一個Firebase存儲問題,錯誤(令人困惑)是一個'NSPOSIXErrorDomain',這意味着問題來自文件系統不會讓開發人員寫入該位置。 –

0

也許它的iOS 9的應用程序傳輸安全,此代碼添加到您的info.plist並再次檢查

<key>NSAppTransportSecurity</key> 
    <dict> 
     <!--Include to allow all connections (DANGER)--> 
     <key>NSAllowsArbitraryLoads</key> 
      <true/> 
    </dict> 
+1

不,不需要ATS,因爲Firebase存儲使用適當的SSL密碼。 –