在Android Firebase存储中上传文件后如何获取文件下载Url? getDownloadUrl()不起作用

时间:2018-05-28 17:08:35

标签: java android firebase firebase-storage

在我的新android firebase项目中,我使用了com.google.firebase:firebase-storage:16.0.1库。

我收到以下错误:

enter image description here

我打开了另一个项目,该项目包含了处理该项目的库firebase-storage:15.0.2taskSnapshot.getDownloadUrl();。但在使用最新的依赖库后,它无法正常工作。

现在,我该如何获取文件URL?

以任何方式获取文件下载链接?

6 个答案:

答案 0 :(得分:25)

我找到了解决问题的方法。

Firebase Google Documentation

//add file on Firebase and got Download Link
filePath.putFile(imageUri).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
    @Override
    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
        if (!task.isSuccessful()){
            throw task.getException();
        }
        return filePath.getDownloadUrl();
    }
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
        if (task.isSuccessful()){
            Uri downUri = task.getResult();
            Log.d(TAG, "onComplete: Url: "+ downUri.toString());
        }
    }
});

另一个解决方案!

它比Google Firebase文档更简单,更小,我将使用它:

filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                Log.d(TAG, "onSuccess: uri= "+ uri.toString());
            }
        });
    }
});

答案 1 :(得分:4)

该方法已在版本16.0.1上弃用(检查Firebase release notes),因此您必须使用

StorageReference.getDownloadUrl()

如果您想在上传文件后获取它们,则必须检查其文档here。它已经更新。

答案 2 :(得分:1)

这就是我在Kotlin android中获得下载链接的方式。

 ref.putFile(filePath!!)
            .addOnSuccessListener {
            val result = it.metadata!!.reference!!.downloadUrl;
            result.addOnSuccessListener {

               val imageLink = it.toString()


            }
        }

答案 3 :(得分:0)

taskSnapshot.getDownloadUrl()已过时,因此我建议在addOnSuccessListener()方法中,使用storageReference并调用getDownloadUrl()方法以获取文件的url,然后您可以对其进行任何操作。希望对您有所帮助。

         mUploadTask = storageRef.putFile(file).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                // get the image Url of the file uploaded
                storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        // getting image uri and converting into string
                        Uri downloadUrl = uri;
                       fileUrl = downloadUrl.toString();


                    }
                });

            }
        });

答案 4 :(得分:0)

Firebase更新了他们的方法,请友好地使用此方法更新自己:

这是您感到烦恼的基本行,非常简单,只需以这种方式获取下载路径

 StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString());
  UploadTask  uploadTask = ref.putFile(filePath);
  Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot,
         Task<Uri>>() {
   @Override
   public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
     if (!task.isSuccessful()) {
       throw task.getException();
     }

                                                              // Continue with the task to get the download URL
     return ref.getDownloadUrl();
   }
 }).addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
      if (task.isSuccessful()) {
        Uri downloadUri = task.getResult();


    ///here is your image url enjoy this 

          Toast.makeText(CloudStorageActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();

        }


      } else {


        // Handle failures
        // ...
      }
    }
  });

答案 5 :(得分:0)

在这种情况下,最好继续使用addOnSuccessListener,但要直接使用getDownloadUrl,也需要添加一个监听器

现在方法像这样在taskSnapshot.getMetadata().getReference()内部

filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                 taskSnapshot.getMetadata().getReference().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        // User uri here
                    }
                });
            }

        });