Попытка сделать константу, которая является UIImageurl в Firebase - PullRequest
1 голос
/ 08 февраля 2020

у меня возникли проблемы с созданием константы, представляющей собой строку из uiimageurl в firebase. Я сохранил URL в базе данных Firebase. и выглядит это так: enter image description here

в предыдущих версиях Firebase и Swift вы могли сделать это, просто сделав это:

let imageUrl = User.profileImageUrl

сейчас это не работает, и мне нужно найти обновленную версию о том, как это сделать. Ответ с благодарностью, большое спасибо!

Ответы [ 2 ]

0 голосов
/ 09 февраля 2020

Кроме того, чтобы заполнить изображение из Firebase, я использую это, и похоже, что это будет работать для вас ...

func showProfilePicture() {
    if let uid = Auth.auth().currentUser?.uid {
                let storage = Storage.storage()
                let storageRef = 
 storage.reference(withPath: "\(uid)/photos/\(0)")
                PhotoUploader.downloadImageUrl(from: 
 storageRef) {[weak self] (url) in
                    guard let url = url else { return }

  self?.displayProfileImage.downloaded(from: url, contentMode: .scaleAspectFill)
                }
    } else {
        showAlert(withTitle: "Error", message: "Not signed in")
    }
}
0 голосов
/ 08 февраля 2020

Вам необходимо сначала сохранить изображение. Тогда вы сможете получить URL-адрес, где изображение сохраняется. Вот пример.

func saveButtonPressed() {
    let storageRef = Storage.storage().reference(withPath: "profile_images")

    let imageData = profileImageView.image?.jpegData(compressionQuality: 0.8)
    guard let data = imageData else { return }

    let metadata = StorageMetadata()
    metadata.contentType = "image/jpeg"

    // Here you can decide where to save the image. In your case it will look something like this.
    // let ref = Storage.storage().reference(withPath: "profile_images").child(user.uid)
    storageRef.putData(data, metadata: metadata) { (metadata, error) in
        if let _ = error {
            // Error Handling...
            return
        }

        storageRef.downloadURL { (url, error) in
            if let _ = error {
                // Error Handling...
                return
            }

            guard let url = url else { return }
            let urlString = url.absoluteString
            print(urlString)
        }
    }
}

Надеюсь, это поможет.

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

//Example as above
let storageRef = Storage.storage().reference(withPath: "profile_images").child(user.uid)
storageRef.downloadURL { (url, error) in
            if let _ = error {
                // Error Handling...
                return
            }

            guard let url = url else { return }
            let urlString = url.absoluteString
            print(urlString)
        }

Если в ссылке нет изображения, вы получите ошибку. Это в основном так же, как первый ответ, который я дал, но без сохранения. Поскольку изображение уже существует, вы можете просто использовать ref.downloadURL. Надеюсь, это поможет.

...