2016-06-08 81 views
2

我可以将图片上传到Firebase存储,但我无法下载它们。这是我的代码来下载图片:如何从新的Firebase存储下载和查看图像?

let storage = FIRStorage.storage() 
let localURL : NSURL! = NSURL(string: "file:///Documents/co.png") 
// i also tried let localURL : NSURL! = NSURL.fileURLWithPath("file:///Documents/co.png") 

func download() { 
    let storageRef = storage.referenceForURL("gs://project-5547819591027666607.appspot.com") 
    let imageRef = storageRef.child("co.png") 

    let downloadTask = imageRef.writeToFile(localURL) { (URL, error) -> Void in 
     if (error != nil) { 
      print(error?.localizedDescription) 
     } 
     else { 
      self.imageView.image = UIImage(data: data!) 
     } 
    } 
} 

我收到 - 可选(“出现未知错误,请检查服务器的响应。”)

还有一次,我让他们下载了我怎么查看那个图像?

对于尝试查看图像是否被下载,我创建了一个UIImageView并在storyboard中为它设置了一个名为“imageView”的插座,然后将下载的图像设置为UIImageView。

self.imageView.image = UIImage(data: data!) 
+0

您的网址似乎是错误的文件。尝试'fileURLWithString'确保你可以从应用中首先加载图像,然后继续上传 – Shubhank

+0

我想下载 –

+0

查看下载文件的URL部分[这里](https://firebase.google。 com/docs/storage/ios/download-files#generate_a_download_url)。下载网址,然后在Alamofire或NSURLSession中自己使用该网址。这将会更容易做到,因为Alamofire会更好地做缓存和事情。 – Shubhank

回答

4

尝试

首先得到参考你想使用

let reference = FIRStorage.storage().reference("uploads/sample.jpg") 

如果你知道图像的大小是低下载图像 - 就像1-2 MB最大。将图像下载到内存中

reference.dataWithMaxSize(1 * 1024 * 1024) { (data, error) -> Void in 
    if (error != nil) { 
    print(error) 
    } else { 
    let myImage: UIImage! = UIImage(data: data!)  
    } 
} 

这将是从Firebase存储直接下载的最快捷方式。

但是有些情况下,您需要进度块和某些其他内容,如缓存。在这种情况下,您可以使用Alamofire等任何第三方从您从Firebase Storage获取的网址下载图片。
,以便获得url做这样的事

reference.downloadURLWithCompletion { (URL, error) -> Void in 
    if (error != nil) { 
    // Handle any errors 
    } else { 
    print(URL) 
    // download image using NSURLSession or Alamofire 
    } 
} 
+0

似乎工作,因为现在我得到'可选(错误域= FIRStorageErrorDomain代码= -13021“用户没有权限访问gs://project-*******.appspot.com/(null) 。”的UserInfo = {ResponseBody = { “错误”:{ “代码”:403, “消息”: “需要开发凭证” } },ResponseErrorCode = 403,NSLocalizedDescription =用户不具有权限访问gs://project-5547819591027666607.appspot.com/(null)。})' –

+0

阅读权限https://firebase.google.com/docs/storage/security/start#overview – Shubhank

+0

更改安全规则或使用身份验证将会解决这个问题,尽管'/(null)'很麻烦,因为它看起来好像没有真正下载任何东西(你是否试图在根引用处下载某些东西?)。 –

相关问题