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

Я хотел бы загрузить изображение профиля в Firebase, когда выбран мой UIImage.Но я не знаю, как это сделать, и я не могу понять документацию, потому что я новичок в кодировании).Пожалуйста, помогите мне.Мне нужно загрузить картинку в 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)
}

Я не знаю, как загрузить и загрузить изображение профиля.

1 Ответ

2 голосов
/ 01 июня 2019

Создать ссылку на хранилище и добавить имя папки и имена изображений.

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)
}

Сохранить загруженную ссылку на фотографию в деталях пользователя Обновить профиль пользователя

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
        }
    }
}
...