Firebase存储的DownloadUrl不起作用

时间:2019-03-18 12:06:23

标签: android firebase url firebase-storage

我尝试查找许多stackoverflow问题, 和许多其他地方,但找不到可行的方法。

我正在将图片上传到Firebase存储,并且在上传时我想要该图片/文档的下载链接。

taskSnapshot.getDownloadUrl()现在已弃用, 因此他们提到在Firebase存储参考上使用getDownloadUrl,或在getResult上使用taskSnapshot,但是两者都返回一些行话,而我无法获得正确的下载URL。

btnUploadImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!ImageUri.toString().trim().equals(""))
                {

                    final StorageReference imageRef = mFirebaseStorage.child("some.jpg");
                    imageRef.putFile(ImageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                            Toast.makeText(MainActivity.this, "Done", Toast.LENGTH_SHORT).show();
                            Log.d("UploadSuccess", ""+task.getResult()+"\n"+mFirebaseStorage.getDownloadUrl());
                        }
                    });

                }else
                {
                    Toast.makeText(MainActivity.this, "Please Select An Image.", Toast.LENGTH_SHORT).show();
                }
            }
        });

这给了我一个日志输出:

  

D / UploadSuccess:   com.google.firebase.storage.UploadTask$TaskSnapshot@fff6f13       com.google.android.gms.tasks.zzu@c781349

以及我正在使用的firebase / storage的版本:

implementation 'com.google.firebase:firebase-database:16.1.0'
implementation 'com.google.firebase:firebase-storage:16.1.0'

1 个答案:

答案 0 :(得分:1)

尝试一下

val ref = mStorageReference?.child("some.jpg")
        val  uploadTask = ref?.putFile(Uri.fromFile(File(mImagePath)))

        uploadTask?.continueWithTask(Continuation<UploadTask.TaskSnapshot, Task<Uri>>
        { task ->
            if (!task.isSuccessful) {
                task.exception?.let {
                    throw it
                }
            }
            return@Continuation ref.downloadUrl
        })?.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                val downloadUri = task.result
                mTempDatabaseReference?.child("image")?.setValue(downloadUri.toString())
            } else {
                // Handle failures
                // ...
            }
        }