如何从Firebase Storage获取下载URL?

时间:2018-11-14 12:09:10

标签: java android firebase firebase-storage

我想从Firebase的uploadTask.addOnProgressListener方法获得“下载网址”。如何使用以下代码获取下载网址?

    UploadTask uploadTask = storageRef.putBytes(data);

    uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>()
    {
        @Override
        public void onProgress(UploadTask.TaskSnapshot taskSnapshot)
        {
            Log.d("aaaaasessin",""+taskSnapshot.getTask().getResult());
        }
    });

我使用了taskSnapshot.getTask().getResult(),但是没有用。

1 个答案:

答案 0 :(得分:3)

要获取下载网址,您需要使用addOnSuccessListener,如以下代码行所示:

uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                String url = uri.toString();

                //Do what you need to do with url
            }
        });
    }
});

正如Firebase release notes在2018年5月23日所提到的那样:

  

云存储版本16.0.1

     

删除了不推荐使用的StorageMetadata.getDownloadUrl()和UploadTask.TaskSnapshot.getDownloadUrl()方法。要获取当前的下载URL,请使用StorageReference.getDownloadUr()。

现在,当在getDownloadUrl()对象上调用StorageReference时,它将返回一个Task对象,并且不再一个Uri对象了。

也请记住,如果您的设备无法访问Firebase Storage后端,则不会调用成功侦听器或失败侦听器(如果您打算使用它)。仅在数据提交到Firebase服务器或被Firebase服务器拒绝后,才会调用成功/失败侦听器。