我使用Firebase存储将图像存储在FB中,我在Realtime DB中保存了下载URL并从存储中检索了一些照片,我使用此代码:
WHERE
我的问题是我想使用其他Firebase项目中的一些照片。例如,下载URL将是: https://firebasestorage.googleapis.com/v0/b/PROJECT1.appspot.com/o/someMedia&token
在我当前的项目中,存储桶与以下不同: https://firebasestorage.googleapis.com/v0/b/PROJECT2.appspot.com/o/someMedia&Token
当我尝试使用当前 let storage = FIRStorage.storage()
imageRefInDB.observeEventType(.Value, withBlock: { (snapshot) in
// Get download URL from snapshot
let downloadURL = snapshot.value as! String
// Create a storage reference from the URL
let storageRef = storage.referenceForURL(downloadURL)
storageRef.dataWithMaxSize(1 * 1024 * 1024) { (data, error) -> Void in
if (error != nil) {
print(error.debugDescription)
} else {
let downloadedImage = UIImage(data: data!)
}
}
})
中的PROJECT1
文件时,我收到以下错误:
PROJECT2
有没有办法从其他项目中下载这些文件,例如Firebase中的设置,而无需通过常规网址下载来检索这些文件? 谢谢你的帮助!
答案 0 :(得分:2)
我尝试了一次,这导致了一段不愉快的时光。在我的情况下,我有两个不同的桶用于我的图像,所以我必须找到一个替代解决方案。
如果您只有一个存储桶,则可以尝试在FIRApp
中配置该存储桶:
let firOptions = FIROptions(googleAppID: googleAppID, bundleID: bundleID, GCMSenderID: GCMSenderID, APIKey: nil, clientID: nil, trackingID: nil, androidClientID: nil, databaseURL: databaseURL, storageBucket: storageBucket, deepLinkURLScheme: nil)
FIRApp.configureWithName("anotherClient", options: options)
let app = FIRApp(named: "anotherClient")
let storageRef = FIRStorage.storage(app: app!).reference()
取自this answer,因此您可能需要对其进行修改以满足您的需求
使用该应用,您可以使用Firebase存储API,因为您已经在下载图像数据。
如果你有多个存储桶(就像我一样),你要么必须配置多个应用程序,要么(就像我一样)自己处理从downloadURL下载图像(不使用Firebase存储API):
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) {
let data = NSData(contentsOfURL: downloadURL) //make sure your image in this url does exist, otherwise unwrap in a if let check
dispatch_async(dispatch_get_main_queue(), {
let downloadedImage = UIImage(data: data!)
});
}