Firebase Storage中taskSnapshot.getDownloadUrl()已废弃,该用何种替代方法?
嗨~我刚好熟悉这个问题,taskSnapshot.getDownloadUrl()确实已经被Firebase官方废弃了,现在有更规范的替代方案,我给你详细说明下:
替代废弃方法的解决方案
Firebase Storage现在将获取下载URL的方法迁移到了StorageReference对象上,不再直接从UploadTask.TaskSnapshot调用。下面分两种常见场景给出具体实现:
场景1:上传完成后立即获取下载URL
当文件上传成功拿到TaskSnapshot后,先通过它获取对应的Storage引用,再调用getDownloadURL()方法:
uploadTask.addOnSuccessListener(taskSnapshot -> { // 获取上传文件对应的Storage引用 StorageReference storageRef = taskSnapshot.getStorage(); // 异步获取下载URL storageRef.getDownloadUrl() .addOnSuccessListener(uri -> { String downloadUrl = uri.toString(); // 在这里使用获取到的下载链接 }) .addOnFailureListener(exception -> { // 处理获取URL失败的异常情况 }); });
场景2:获取已存在文件的下载URL
如果文件已经存储在Firebase Storage中,直接创建指向该文件的Storage引用,再调用获取方法即可:
// 创建指向目标文件的Storage引用 StorageReference targetFileRef = FirebaseStorage.getInstance() .getReference() .child("your/file/path/filename.jpg"); // 获取下载URL targetFileRef.getDownloadUrl() .addOnSuccessListener(uri -> { String downloadUrl = uri.toString(); // 使用下载链接 }) .addOnFailureListener(exception -> { // 处理错误 });
额外提示(Kotlin用户)
如果你用Kotlin开发,可以借助协程简化异步代码,让逻辑更清晰:
val storageRef = taskSnapshot.storage val downloadUrl = runBlocking { storageRef.getDownloadURL().await().toString() } // 后续使用downloadUrl
内容的提问来源于stack exchange,提问作者Liliana J
相关产品推荐
相关产品推荐

