web-dev-qa-db-ja.com

タイプ「StorageMetadata」の値にメンバー「downloadURL」がありません

ちょっと私はこのコーディングで助けが必要です、私は何が起こったのか分かりません。先日働いていました。 if let ur; = metaData?.downladURL()の後にエラーが発生します

func uploadProfileImage(_ image:UIImage, completion: @escaping ((_ url:URL?)->())) {
        guard let uid = Auth.auth().currentUser?.uid else { return }
        let storageRef = Storage.storage().reference().child("user/\(uid)")

        guard let imageData = UIImageJPEGRepresentation(image, 0.75) else { return }

        let metaData = StorageMetadata()
        metaData.contentType = "image/jpg"

        storageRef.putData(imageData, metadata: metaData) { metaData, error in
            if error == nil, metaData != nil {
                if let url = metaData?.downloadURL() {
                    completion(url)
                } else {
                    completion(nil)
                }
                // success!
            } else {
                // failed
                completion(nil)
            }
        }
    }
15
Timbology

Firebaseポッドを更新した可能性があります。 Firebase 5.0では、metaData?.downladURL()関数を削除しました。あなたは彼らのウェブサイトで更新されたドキュメントに従う必要があります。そこからコピー:

// Data in memory
let data = Data()

// Create a reference to the file you want to upload
let riversRef = storageRef.child("images/rivers.jpg")

// Upload the file to the path "images/rivers.jpg"
let uploadTask = riversRef.putData(data, metadata: nil) { (metadata, error) in
  guard let metadata = metadata else {
    // Uh-oh, an error occurred!
    return
  }
  // Metadata contains file metadata such as size, content-type.
  let size = metadata.size
  // You can also access to download URL after upload.
  storageRef.downloadURL { (url, error) in
    guard let downloadURL = url else {
      // Uh-oh, an error occurred!
      return
    }
  }
}

Firebase Storage: https://firebase.google.com/docs/storage/ios/upload-files

20
Maxim Zh

ポッドを更新して、代わりにこれを置きます:

func uploadProfileImage(_ image:UIImage, completion: @escaping ((_ url:URL?)->())) {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    let storageRef = Storage.storage().reference().child("user/\(uid)")

    guard let imageData = UIImageJPEGRepresentation(image, 0.75) else { return }

    let metaData = StorageMetadata()
    metaData.contentType = "image/jpg"

    storageRef.putData(imageData, metadata: metaData) { metaData, error in
        if error == nil, metaData != nil {

            storageRef.downloadURL { url, error in
                completion(url)
                // success!
            }
            } else {
                // failed
                completion(nil)
            }
        }
    }
3
Jose Fermin
    // MARK: - handleRegister
func handleRegister() {
    guard let email = emailTextField.text, let password = passwordTextField.text, let name = nameTextField.text else {
        print("Error")
        return
    }

    Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
        if error != nil {
            // print("Error")
            return
        }

        // MARK: - hadleLogin// 

        guard let uid = Auth.auth().currentUser?.uid  else {
            return
        }

        // MARK: - image successful authenficated user

        let imageName = NSUUID().uuidString
        let storageRef = Storage.storage().reference().child("profile_images").child("\(imageName).png")

        if let profileImageUrl = self.profileImageView.image, let  uploadData = UIImageJPEGRepresentation(self.profileImageView.image!, 0.1) {
            storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in

                if error != nil, metadata != nil {
                    print(error ?? "")
                    return

                }

                storageRef.downloadURL(completion: { (url, error) in
                    if error != nil {
                        print(error!.localizedDescription)
                        return
                    }
                    if let profileImageUrl = url?.absoluteString {
                        let values = ["name": name, "email": email, "profileImageUrl": profileImageUrl]
                        self.registeUserIntoDatabaseWithUID(uid: uid, values: values as [String : AnyObject])
                    }
                })
            })
        }
    }
}
3
Slava Loye

削除ポッドフォルダーのFirebaseStorage。
Xcodeを閉じます。
podFileに移動し、pod 'Firebase/Storage'pod Firebase/Storage '、'〜> 4.0 'に変更します
保存 podFileを開いて端末
write:pod updateおよびHit enter
Xcodeを開き、以下を記述します。

if let profileImg     = self.selectedImage, let photoData = profileImg.jpegData(compressionQuality:0.1) {
                storageRef.putData(photoData, metadata: nil, completion: { (metadata, error) in
                    if error != nil  {
                        return
                    }

                   let profileImageUrl = metadata?.downloadURL()?.absoluteString
                    let ref                 = Database.database().reference()
                    let usersReference      = ref.child("user")

                    let newUserReference    = usersReference.child(uid!)
                    newUserReference.setValue(["username" :self.usernameTextField.text!, "email" :self.emailTextField.text!, "ProfileImageUrl":profileImageUrl])
                })

プロジェクトを実行すると、エラーはなくなります

0
sara