从不同项目下载并使用存储在Firebase存储中的文件

时间:2016-09-28 05:29:49

标签: ios swift firebase firebase-storage

我使用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中的设置,而无需通过常规网址下载来检索这些文件? 谢谢你的帮助!

1 个答案:

答案 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!)
    });
}