未知中间子路径时,能否从Firebase Storage下载文件?
Firebase Storage 未知中间随机子路径时的文件下载问题
不能直接通过通配符*来定位文件,Firebase Storage的child()方法不支持通配符匹配——你写的.child("*")会被当作字面量的路径片段,实际查找的是/students/ekljfbwekncwlkjbweclk/gpas/*/4这个具体路径,而非匹配任意子路径,所以代码会失败。
要实现需求,有两种可行方案:
1. 遍历目录查找目标文件
通过listAll()方法列出gpas下的所有子目录,逐个检查每个目录下是否存在4文件:
firebaseStorageStudentRef.child("ekljfbwekncwlkjbweclk").child("gpas") .listAll() .addOnSuccessListener { listResult -> // 遍历gpas下的所有子文件夹 listResult.prefixes.forEach { folderRef -> folderRef.child("4") .downloadUrl .addOnSuccessListener { uri -> Log.i(TAG, "Success! Uri is: $uri") } .addOnFailureListener { // 当前文件夹下无目标文件,忽略错误 } } } .addOnFailureListener { e -> Log.e(TAG, "Failed to list folders. Exception is: $e") }
注意:这种方法依赖Storage规则允许列出目录操作,且如果gpas下子目录数量较多,会有一定性能开销。
2. 提前记录完整路径到数据库
在生成随机子路径时,将该路径与学生ID关联存储到Firebase Realtime Database或Firestore中。之后只需通过学生ID查询到完整文件路径,即可直接在Storage中定位并下载文件,这是更高效的方案,避免了目录遍历的开销。
内容的提问来源于stack exchange,提问作者Red M
相关产品推荐
相关产品推荐

