使用Pyrebase操作Firebase Storage遇阻:列文件与下载均失败
Firebase Storage 文件列表读取与下载问题排查
问题概况
尝试读取Firebase Storage里的文件列表,再下载指定文件,但两项操作都失败了:
1. 读取文件列表报错
执行代码:
storage = firebase.storage() print(storage.child('version').list_files())
触发错误:
Traceback (most recent call last): File "C:\Users\bboyc\PycharmProjects\pymoonchild\.venv\checkRecentVersion.py", line 38, in <module> print(storage.child('version').list_files()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\bboyc\PycharmProjects\pymoonchild\.venv\Lib\site-packages\pyrebase\pyrebase.py", line 539, in list_files return self.bucket.list_blobs() ^^^^^^^^^^^ AttributeError: 'Storage' object has no attribute 'bucket'
查资料得知需要服务账号,但因为是公开发布的应用,没采用这个方案。
2. 直接下载无结果
执行代码:
storage.child('version/test0.14.1.zip').download(path='',filename='test.zip')
代码没报错,但文件根本没下载下来,排除权限问题(没收到任何权限相关的错误提示)。
问题分析与解决办法
关于list_files()失败的原因
pyrebase的list_files()方法必须依赖Google Cloud Storage的bucket对象,而这个对象只有通过服务账号认证才能初始化——也就是说,不用服务账号的话,pyrebase没法直接调用list_files()拿文件列表。针对公开发布应用的场景,给两个替代方案:
- 在Firebase Hosting或者其他静态托管服务上放一个文件清单(比如
file_list.json),定期手动或者通过脚本更新这个清单,客户端直接请求这个文件就能拿到可用的文件列表。 - 用Firebase Cloud Functions写一个简单接口,让接口去读取Storage的文件列表再返回给客户端,这样既不用在客户端暴露服务账号,也能实现获取文件列表的需求。
关于下载无反应的问题
代码不报错但没下载,可能是这几个原因:
- 路径参数没写对:
path=''会把文件下载到当前工作目录,你可能没找到。试试指定绝对路径:storage.child('version/test0.14.1.zip').download(path='C:/Users/bboyc/Downloads', filename='test.zip') - pyrebase版本问题:旧版本的pyrebase可能存在静默下载失败的bug,建议升级到社区维护的
pyrebase4分支:
注意:原版pyrebase已经停止维护了,pip install --upgrade pyrebase4pyrebase4是目前可用的替代。 - 文件路径拼写错误:仔细核对Storage里的文件路径
version/test0.14.1.zip,包括大小写——Firebase Storage的路径是区分大小写的。 - 网络或代理问题:检查网络连接,如果用了代理,要确保pyrebase能通过代理正常访问Firebase服务。
内容的提问来源于stack exchange,提问作者MooNChilD Song
相关产品推荐
相关产品推荐

