1. ホーム
  2. swift

[解決済み] タイプ 'StorageMetadata' の値には、メンバー 'downloadURL' がありません。

2022-03-04 04:57:25

質問

このコーディングで助けが必要です。先日まではうまくいっていたのですが エラーは 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)
            }
        }
    }

解決方法は?

FirebaseのPodをアップデートしたことがあるかと思います。Firebase 5.0では、Firebaseのポッドから 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.
  riversRef.downloadURL { (url, error) in
    guard let downloadURL = url else {
      // Uh-oh, an error occurred!
      return
    }
  }
}

Firebaseのストレージです。 https://firebase.google.com/docs/storage/ios/upload-files