存储对 URL 的引用
Posted
技术标签:
【中文标题】存储对 URL 的引用【英文标题】:StorageReference to URL 【发布时间】:2020-04-17 18:01:45 【问题描述】:我正在尝试遵循 Firebase 的文档,了解如何在应用程序中向用户显示来自 firebase 存储的图像。这是下面的文档:
// Reference to an image file in Firebase Storage
let reference = storageRef.child("images/stars.jpg")
// UIImageView in your ViewController
let imageView: UIImageView = self.imageView
// Placeholder image
let placeholderImage = UIImage(named: "placeholder.jpg")
// Load the image using SDWebImage
imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)
我自己尝试这样做:
//get image url from deal
self.ref.child("deals").child("log").child(currentDealView).child("pictures").child(currentImageView).child("imageSelected").child("imageSelected").observeSingleEvent(of: .value) (snapshot) in
let imageUrlString = snapshot.value as! String
let imageUrlUrl = URL(string: imageUrlString)
print(imageUrlString)
//prints "deals/log/dealNumber83/pictures/googleScreenshot/imageSelected"
// Reference to an image file in Firebase Storage
let reference = self.storageRef.child(imageUrlString)
// UIImageView in your ViewController
let viewPicImageView: UIImageView = self.viewPicImageView
// Placeholder image
let placeholderImage = UIImage(named: "placeholder.jpg")
// Load the image using SDWebImage
viewPicImageView.sd_setImage(with: reference, placeholderImage: placeholderImage)
但在最后一行,我在“with:reference”处出现错误,说:“无法将 'StorageReference' 类型的值转换为预期的参数类型 'URL?'”我在网上找不到任何关于如何使用的信息将StorageReference
转换为URL
?谢谢。
【问题讨论】:
【参考方案1】:你可以用这个:
let Ref = Storage.storage().reference(forURL: imageUrlUrl)
Ref.getData(maxSize: 1 * 1024 * 1024) data, error in
if error != nil
print("Error: Image could not download!")
else
yourImageView.image = UIImage(data: data!)
希望对你有帮助...
【讨论】:
如果我使用forURL: imageUrlUrl
,我会收到错误消息“无法转换'URL 类型的值?'到预期的参数类型“字符串””。如果我将其更改为 forURL: imageUrlString
,则应用程序崩溃并出现错误“线程 1:异常:”URL 方案必须是 gs://、http:// 或 https:// 之一“”
当您在存储中点击下载图像时,它会为您提供一个 url。将此写入您的代码。
我使用您的代码让它工作(谢谢),我意识到我的问题是 imageURLString 是“deals/x/x/pic”,我将该字符串更改为“gs://myap- gd36f.appspot.com/deals/x/x/pic" 而是修复了它。【参考方案2】:
或者,FirebaseStorageSwift 测试版利用 Swift Result 类型。 (将pod 'FirebaseStorageSwift'
添加到 Podfile。)
let Ref = Storage.storage().reference(forURL: imageUrlUrl)
Ref.getData(maxSize: 1 * 1024 * 1024) result in
switch result
case let .success(data):
yourImageView.image = UIImage(data: data)
case let .failure(error):
print("Error: Image could not download! \(error)")
【讨论】:
以上是关于存储对 URL 的引用的主要内容,如果未能解决你的问题,请参考以下文章