Kotlin FirebaseStorage getDownloadUrl错误

时间:2019-12-17 16:35:32

标签: android kotlin firebase-storage

嗨,我想获取downloadUrl,但出现错误 我尝试过一些这样的方法

var firebaseURL =p0?.uploadSessionUri.toString()的结果是 url ,但是如果我打开此URL,则会收到此错误Invalid request. X-Goog-Upload-Command header is missing.  (我是科特林的新人)

uploadTo.addOnSuccessListener (object :OnSuccessListener<UploadTask.TaskSnapshot>{

        override fun onSuccess(p0: UploadTask.TaskSnapshot?) {

            var firebaseURL =p0.downloadUrl // i got error in this line

            FirebaseDatabase.getInstance().reference
                .child("Users")
                .child(FirebaseAuth.getInstance().currentUser?.uid!!)
                .child("imagurl")
                .setValue(firebaseURL.toString())

        }
    })

1 个答案:

答案 0 :(得分:0)

这里的downloadUrl“属性”实际上根本不是属性。这是一种称为getDownloadUrl的方法,该方法返回另一个异步获取URL的Task。它不会直接返回URL。有关正确使用方法的信息,请参见documentation。例如:

val ref = storageRef.child("images/mountains.jpg")
uploadTask = ref.putFile(file)

val urlTask = uploadTask.continueWithTask { task ->
    if (!task.isSuccessful) {
        task.exception?.let {
            throw it
        }
    }
    ref.downloadUrl
}.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        val downloadUri = task.result
    } else {
        // Handle failures
        // ...
    }
}

这里发生的是:

  1. 正在使用uploadTask上传文件。
  2. 完成后,该任务会作为回调添加到该任务中
  3. ref.downloadUrl返回另一个任务以获取URL。
  4. 另一个回调已添加到链中,以处理获取的URL。

另请参阅:How to get URL from Firebase Storage getDownloadURL

问题的实质是此API的设计不是很好。该方法以“ get”开头,但实际上不是属性获取器。