Swift 将图像上载到Firebase存储并显示为配置文件图像

Swift 将图像上载到Firebase存储并显示为配置文件图像,swift,firebase,uiimageview,uiimagepickercontroller,firebase-storage,Swift,Firebase,Uiimageview,Uiimagepickercontroller,Firebase Storage,我需要有关将图像上载到Firebase存储的帮助。我的应用程序中有一个配置文件菜单。当用户点击此菜单时,他/她可以看到配置文件及其信息和配置文件图像。所以我做了它,你可以从图库中选择一张照片。但我需要将照片保存到Firebase存储,并通过uid将ref添加到Firebase数据库。 此外,用户可能没有照片,所以它将是nill,因为数据库中没有任何内容。看这张照片,你们会明白一切 extension ProfileViewController: UIImagePickerControllerDe

我需要有关将图像上载到Firebase存储的帮助。我的应用程序中有一个配置文件菜单。当用户点击此菜单时,他/她可以看到配置文件及其信息和配置文件图像。所以我做了它,你可以从图库中选择一张照片。但我需要将照片保存到Firebase存储,并通过uid将ref添加到Firebase数据库。 此外,用户可能没有照片,所以它将是nill,因为数据库中没有任何内容。看这张照片,你们会明白一切

extension ProfileViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    var selectedImage: UIImage?
    if let editedImage = info[.editedImage] as? UIImage {
        selectedImage = editedImage
        self.profileImage.image = selectedImage!
        self.savedImage = selectedImage
        picker.dismiss(animated: true, completion: nil)
    } else if let originalImage = info[.originalImage] as? UIImage {
        selectedImage = originalImage
        self.profileImage.image = selectedImage!
        self.savedImage = selectedImage
        picker.dismiss(animated: true, completion: nil)
    }

}



let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView) )
        profileImage.addGestureRecognizer(tapGesture)
        profileImage.isUserInteractionEnabled = true

@objc func handleSelectProfileImageView () {
    print("Tapped")

    let pickerController = UIImagePickerController()
    pickerController.delegate = self
    present(pickerController, animated: true, completion: nil)

}
那么,如何上传和下载图像。 如果用户没有照片(数据库中的ref)。他将从资产中看到图像。 如果用户有照片,他将看到来自FB的图像。

用于上载到Firebase存储

let imgData: NSData = NSData(data: UIImageJPEGRepresentation((self.img_Photo?.image)!, 0.5)!)
let _:NSData = NSData(data:UIImagePNGRepresentation(((self.img_Photo?.image)!))!)
self.uploadProfileImageToFirebase(data: imgData)
上传功能

func uploadProfileImageToFirebase(data:NSData){
    let randomPic = randomString(length: 10)
    let storageRef = Storage.storage().reference().child("Pictures").child("\(value(forKey: "UserUID") ?? randomPic).jpg")
    if data != nil {
        storageRef.putData(data as Data, metadata: nil, completion: { (metadata, error) in
            if(error != nil){
                print(error)
                return
            }
            guard let userID = Auth.auth().currentUser?.uid else {
                return
            }
            // Fetch the download URL
            storageRef.downloadURL { url, error in
                if let error = error {
                    // Handle any errors
                    if(error != nil){
                        print(error)
                        return
                    }
                } else {
                    // Get the download URL for 'images/stars.jpg'

                    let urlStr:String = (url?.absoluteString) ?? ""
                    let values = ["photo_url": urlStr]
                    self.registerUserIntoDatabaseWithUID(uid: userID, values: values as [String : AnyObject])
                }
            }
        })
    }

}

func registerUserIntoDatabaseWithUID(uid:String, values:[String:AnyObject]){
    let ref = Database.database().reference(fromURL: "https://domain.firebaseio.com/")
    let usersReference = ref.child("users").child((Auth.auth().currentUser?.uid)!)

    usersReference.updateChildValues(values) { (error, ref) in
        if(error != nil){
            print(error)
            return
        }
        self.parentVC?.dismiss(animated: true, completion: nil)
    }

}

你看过Firebase文档了吗?还有一节介绍如何下载。这相当简单。我没有看到您尝试过的任何代码,因此不清楚问题出在哪里。请阅读以下指南