swift - 从 UIImagePicker 上传图片到 Firebase

标签 swift firebase uiimage uiimagepickercontroller

当我的 UIImage 选择器被选中时,我想将个人资料图片上传到 Firebase。但我不知道该怎么做 我无法理解文档,因为我是编码新手)。请帮我。我需要将图片上传到 Firebase。它将是用户图片,因此对图片的引用应保存到数据库中。

extension ProfileViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {




    let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
    profileImage.image = image
   picker.dismiss(animated: true, completion: nil)
}

我不知道如何上传和下载个人资料图片。

最佳答案

创建存储引用并添加文件夹名称和图像名称。

Storage.storage().reference().child("id").child("profile.png")

并使用putData:metadata:completion:方法上传图片。上传图片后,获取图片 url 并在用户详细信息中更新它。

上传个人资料图片

import FirebaseStorage
import FirebaseAuth

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let image = info[.originalImage] as? UIImage, let imageData = image.pngData() {
        profileImage.image = image
        let storageRef = Storage.storage().reference().child("id").child("profile.png")
        let metaData = StorageMetadata()
        metaData.contentType = "image/png"
        storageRef.putData(imageData, metadata: metaData) { (metaData, error) in
            if error == nil, metaData != nil {
                storageRef.downloadURL { url, error in
                    if let url = url {
                        print(url)//URL of the profile image
                        self.saveProfileImageUrlInUserDetails(url: url)
                    }
                }
            } else {
                print(error?.localizedDescription)//upload failed
            }
        }
    }
    picker.dismiss(animated: true, completion: nil)
}

在用户详细信息中保存上传的照片引用 Update the user's profile

func saveProfileImageUrlInUserDetails(url: URL) {
    let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
    changeRequest?.photoURL = url
    changeRequest?.commitChanges(completion: { error in
        if error == nil {
            //saved
        } else {
            print(error?.localizedDescription)//failed to udpate
        }
    })
}

下载个人资料图片

if let profileImgUrl = Auth.auth().currentUser?.photoURL?.absoluteString {
    let ref = Storage.storage().reference(forURL: profileImgUrl)
    ref.getData(maxSize: 1 * 1024 * 1024) { data, error in
        if let error = error {
            print(error.localizedDescription)
        } else if let data = data, let image = UIImage(data: data) {
                self.profileImage.image = image
        }
    }
}

关于swift - 从 UIImagePicker 上传图片到 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56407641/

相关文章:

ios - 如果在数字之前按下计算器应用程序中的运算符(operator)按钮,则应用程序崩溃

javascript - 使用reactjs将编辑后的数据保存到firebase

android - Android 和 iOS 之间关于数据消息的 FCM 差异

express - 如何在不影响实时功能的情况下为React和React-native托管Firebase的通用后端代码?

ios - UIImage "imageNamed:"适用于 iOS 8,但不适用于 7?

arrays - 如何快速更改数组内 UIImage 的隐藏状态?

ios - 'CLLocationCoordinate2D' 与协议(protocol) 'decodable'/'encodable' 的冗余一致性

ios - 使用 sender.tag 更改 UIView 颜色

ios - 如何使用 swift 将 PFFile 转换为 UIImage?

swift - uiimagepicker 为我的 imageview 选择相同的图像