如何从 Firebase Storage 获取下载网址?
Posted
技术标签:
【中文标题】如何从 Firebase Storage 获取下载网址?【英文标题】:How to get the download url from 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()
,但这不起作用。
【问题讨论】:
【参考方案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。我可以帮助您了解其他信息吗?以上是关于如何从 Firebase Storage 获取下载网址?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Firebase Storage 获取图像并在 Angular 2 ngFor 中显示它们
有没有一种简单的方法可以从 Angular 模板中的 firebase-storage 路径获取下载 url