如何将配置文件链接上传到 Firebase 数据库

Posted

技术标签:

【中文标题】如何将配置文件链接上传到 Firebase 数据库【英文标题】:How to upload the profile link to firebase database 【发布时间】:2020-01-07 04:40:02 【问题描述】:

当我的“ProfileImageuUrl”出现在 firebase 数据库中时,缺少指向个人资料图像的链接,这导致我的用户个人资料发生故障,因为其中没有链接,所以图像不会显示firebase 数据库如何将我的代码重构到这个问题

if let AuthData = AuthDataResult 
                print(AuthData.user.email)
                let dict : Dictionary < String, Any> = [
                    "uid": AuthData.user.uid,
                    "email": AuthData.user.email,
                    "ProfileImageUrl": "",
                    ]
             if let profileImge = self.selectedImage, let imageData = profileImge.jpegData(compressionQuality: 0.1) 
             let StorageRef = Storage.storage()
                    .reference(forURL: "gs://tunnel-vision-458d6.appspot.com/")
                let storageProfileRef = StorageRef.child("profileImage").child(AuthData.user.uid)

                let metadata = StorageMetadata()
                metadata.contentType = "profileImage.jpg"
                storageProfileRef.putData(imageData, metadata: metadata)  (storageMetadata, error) in
                    if error != nil 
                    return
                

                    storageProfileRef.downloadURL  (url, error) in
                        if let metaImageUrl = url?.absoluteString 
                        print(metaImageUrl)
                    


                        Database.database().reference().child("users").child(AuthData.user.uid).updateChildValues(dict, withCompletionBlock: 
                            (error,ref) in
                            if error == nil 
                                print("Done")

                            

【问题讨论】:

【参考方案1】:

您正在为 dict 中的 ProfileImageUrl 分配一个空字符串:

let dict : Dictionary < String, Any> = [
    "uid": AuthData.user.uid,
    "email": AuthData.user.email,
    "ProfileImageUrl": "",
]

而且你以后永远不会更新它。 dict 的写法与您在此处看到的完全一样。在写之前给它分配你想要的值。

【讨论】:

我是分配 Firebase 存储 url 还是分配给它的照片图像文件夹【参考方案2】:

你需要

1- 将dict 设为变量

            var dict : Dictionary < String, Any> = [
                "uid": AuthData.user.uid,
                "email": AuthData.user.email 
                ]

2- 为ProfileImageUrl 分配一个值,并在storageProfileRef.downloadURL 的回调中嵌入更新值,其中您有一个图像的网址

              storageProfileRef.downloadURL  (url, error) in
                    if let metaImageUrl = url?.absoluteString 
                    print(metaImageUrl)
                     dict["ProfileImageUrl"] = metaImageUrl
                    Database.database().reference().child("users").child(AuthData.user.uid).updateChildValues(dict, withCompletionBlock: 
                        (error,ref) in
                        if error == nil 
                            print("Done")

                        
                    
               
          

【讨论】:

firebase 存储链接显示在数据库中,但是当您单击链接时没有出现图像@sh-khan 链接扩展名是jpg 我正在设置个人资料屏幕,用户注册的个人资料图片没有出现在他们的个人资料中,因为它没有出现在 firebase 存储中,它说 safari 无法打开指定地址,这段代码让我失望了@sh-khan 什么链接扩展@sh-khan

以上是关于如何将配置文件链接上传到 Firebase 数据库的主要内容,如果未能解决你的问题,请参考以下文章

将 stripeCharge 函数上传到 Firebase 云函数不起作用

Firebase 函数上传到存储

将本机上传到YouTube

如何把文件传到linux服务器上

如何将 Laravel 中的文件直接上传到公用文件夹?

怎样将自己制作的音频传到网上,并得到链接