如何从 Firebase 存储获取下载 url?

aja*_*hal 6 java android firebase firebase-storage

我想从uploadTask.addOnProgressListenerFirebase 的方法中获取下载网址。如何使用以下代码获取下载网址?

    UploadTask uploadTask = storageRef.putBytes(data);

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

我用过,taskSnapshot.getTask().getResult()但这不起作用。

Ale*_*amo 11

2019 年 8 月 22 日编辑:

最近在 Android SDK 的 StorageReference 类中添加了一个名为list()的新方法。

要解决这个问题,您需要遍历ListResult和 调用getDownloadUrl()以获取每个文件的下载 URL。记住该getDownloadUrl()方法是异步的,因此它返回一个Task对象。请参阅下面的详细信息。


为了获取下载 url,您需要使用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
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

正如在2018 年 5 月 23 日的Firebase 发行说明中提到的那样:

云存储版本 16.0.1

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

所以现在当在StorageReference对象上调用getDownloadUrl() 时,它返回一个对象而不是Uri 对象。Task

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