Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Firebase存储和存储问题;数据库_Swift_Firebase_Firebase Realtime Database_Firebase Storage_Image Compression - Fatal编程技术网

Swift Firebase存储和存储问题;数据库

Swift Firebase存储和存储问题;数据库,swift,firebase,firebase-realtime-database,firebase-storage,image-compression,Swift,Firebase,Firebase Realtime Database,Firebase Storage,Image Compression,我有一个应用程序,带有UpdateProfileViewController(iOS应用程序,用Swift编写)。我使用Firebase存储和数据库作为后端。我面临的问题是,我有两个图像需要上传到Firebase存储,然后获取下载URL并将其输入该特定用户的数据库中。现在,我面临三个问题 downloadURL方法应返回指向存储器中上载图像的URL,并将其分配给变量storageHeaderDownloadedURL,另一个变量是headerImgDownloadedURL(这些应该是标题和配置

我有一个应用程序,带有
UpdateProfileViewController
(iOS应用程序,用Swift编写)。我使用Firebase存储和数据库作为后端。我面临的问题是,我有两个图像需要上传到Firebase存储,然后获取下载URL并将其输入该特定用户的数据库中。现在,我面临三个问题

  • downloadURL
    方法应返回指向存储器中上载图像的URL,并将其分配给变量
    storageHeaderDownloadedURL
    ,另一个变量是
    headerImgDownloadedURL
    (这些应该是标题和配置文件图像)

  • 我想更新所有字段,不管用户是否更改了某些内容,只需更新整个用户配置文件即可

  • 我希望能够压缩图像,使它们在大小方面更小,而不是质量,所以用户不上传非常大的图像

  • 这是我的全部代码,我希望有人能帮我解决这个问题,因为我花了2天时间,但我仍然无法解决这些问题:

        @IBAction func savePressed(_ sender: UIBarButtonItem)
    {
        updateUserProfile()
    }
    
    
    func updateUserProfile ()
    {
        if let userID = FIRAuth.auth()?.currentUser?.uid
        {
            // Note: Storage references to profile images & profile headers folder
            let storageUserProfileID = Storage.storage.profile_images.child(userID)
            let storageUserHeaderID = Storage.storage.profile_headers.child(userID)
    
    
            guard let imageProfile = profileImage.image else { return }
    
            guard let headerImage = headerImage.image else { return }
    
            var storageProfileDownloadedURL: String = ""
            var storageHeaderDownloadedURL: String = ""
    
    
            if let newProfileImage = UIImagePNGRepresentation(imageProfile), let newHeaderImage = UIImagePNGRepresentation(headerImage)
            {
                storageUserProfileID.put(newProfileImage, metadata: nil, completion: { (metadata, error) in
    
                    if error != nil
                    {
                        showAlert(title: "Oops!", msg: (error?.localizedDescription)!, actionButton: "OK", viewController: self)
                        return
                    }
                    // Get the URL from the storage
                    storageUserProfileID.downloadURL(completion: { (url, error) in
    
                        if error != nil
                        {
                            showAlert(title: "Oops!!!", msg: (error?.localizedDescription)!, actionButton: "OK", viewController: self)
                            return
                        }
                        if let profileImgDownloadedURL = url?.absoluteString
                        {
                            storageProfileDownloadedURL = profileImgDownloadedURL
                        }
                    })
                })
                storageUserHeaderID.put(newHeaderImage, metadata: nil, completion: { (metadata, error) in
    
                    if error != nil
                    {
                        showAlert(title: "Oops!", msg: (error?.localizedDescription)!, actionButton: "OK", viewController: self)
                        return
                    }
    
                    // Get the URL from the storage
                    storageUserHeaderID.downloadURL(completion: { (url, error) in
    
                        if error != nil
                        {
                            showAlert(title: "Oops!!!", msg: (error?.localizedDescription)!, actionButton: "OK", viewController: self)
                            return
                        }
                        else
                        {
                            if let headerImgDownloadedURL = url?.absoluteString
                            {
                                storageHeaderDownloadedURL = headerImgDownloadedURL
                            }
                        }
                    })
                })
    
                //Note: Update the info for that user in Database
    
            }
    
            guard let newDisplayName = self.displayNameTextField.text else { return }
            guard let newLocation = self.locationTextField.text else { return }
            guard let newDescription = self.bioTextField.text else { return }
            guard let newWebsite = self.websiteTextField.text else { return }
            guard let newBirthday = self.birthdayTextField.text else { return }
    
            let newUpdatedUserDictionary = ["imageProfile": storageProfileDownloadedURL,
                                            "imageHeader" : storageHeaderDownloadedURL,
                                            "description" : newDescription,
                                            "location": newLocation,
                                            "displayName": newDisplayName,
                                            "website": newWebsite,
                                            "birthday": newBirthday,
                                            ]
            Database.dataService.updateUserProfile(uid: userID, user: newUpdatedUserDictionary)
            print("Successfully updated!")
            showAlert(title: "Profile updated", msg: "YAASS", actionButton: "OK", viewController: self)
    
        }
    }