Загрузить изображение в Firebase Storage и показать как изображение профиля - PullRequest
0 голосов
/ 01 июня 2019

Мне нужна помощь с загрузкой изображения в Firebase Storage.У меня есть меню профиля в моем приложении.Когда пользователь нажимает на это меню, он / она может видеть профиль с его информацией и изображением.Итак, я сделал это, чтобы вы могли выбрать фотографию из галереи.Но мне нужно сохранить фотографию в Firebase Storage и добавить ссылку на базу данных Firebase с помощью uid.Кроме того, у пользователя может не быть фотографии, поэтому она будет нулевой, поскольку в базе данных ничего нет.Посмотрите на фото и вы все поймете

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)

}

Итак, как загрузить и загрузить изображение.Если у пользователя нет фотографии (см. База данных).Он увидит изображение из активов.Если у пользователя есть фото, он увидит изображение из FB. изображение

1 Ответ

1 голос
/ 01 июня 2019

Для загрузки в хранилище 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)
    }

}
...