【问题标题】:How to get the download url from Firebase Storage?如何从 Firebase Storage 获取下载网址?
【发布时间】:2019-04-17 09:39:34
【问题描述】:

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

    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(),但这不起作用。

【问题讨论】:

    标签: java android firebase firebase-storage


    【解决方案1】:

    2019 年 8 月 22 日编辑:

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

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


    为了获取下载地址,您需要使用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
                }
            });
        }
    });
    

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

    云存储版本 16.0.1

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

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

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

    【讨论】:

    • 感谢您的回答,但是,我离线执行上传任务,所以无法使用 onSuccsess()。我只能使用 uploadTask.addOnProgressListener()
    • 是的,没错,onSuccsess() 在 offfile 时不会触发,但不幸的是使用 addOnSuccessListener 你不能覆盖 onSuccess() 方法来获取下载 url。这是有道理的,因为只有从服务器获得响应(触发 onSuccess)后,您才能获得下载 url。只要任务没有完成,就无法获取下载地址,对吧?
    • 好的,如果有任何替代方法,请建议我
    • 不,没有。 只有在上传成功后才能获取下载的url,也就是当服务器为你提供url时。当您处于离线状态并且设备与服务器之间没有直接连接时,您将无法获取 url。我可以帮助您了解其他信息吗?
    猜你喜欢
    • 1970-01-01
    • 2019-02-14
    • 2017-05-17
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多