在Django中使用firebase-admin获取Firebase Storage指定目录内容
解决Firebase Storage指定文件夹内容获取问题
要精准获取Firebase Storage中指定文件夹下的文件和子文件夹,只需给list_blobs()传入两个关键参数:prefix和delimiter,无需额外方法。
核心参数说明
prefix:设置为目标文件夹的完整路径,必须以/结尾(比如first_stage/math/),用于限定查询范围,避免匹配到名称相似的其他路径。delimiter:设为/,可以将返回结果区分为当前层级的文件(在blobs集合中)和子文件夹(在prefixes属性中)。
Django中实现的代码示例
import firebase_admin from firebase_admin import storage # 初始化Firebase客户端(仅需执行一次,可放在Django的settings或初始化文件中) if not firebase_admin._apps: cred = firebase_admin.credentials.Certificate('path/to/your-service-account.json') firebase_admin.initialize_app(cred, { 'storageBucket': 'your-bucket-name.appspot.com' }) # 获取存储桶实例 bucket = storage.bucket() # 定义目标文件夹路径,注意结尾加/ target_folder = 'first_stage/math/' # 查询指定文件夹下的内容 result = bucket.list_blobs(prefix=target_folder, delimiter='/') # 遍历当前文件夹下的直接文件并获取URL print("当前文件夹下的文件:") for blob in result: # 生成带有效期的下载URL,这里设置为1小时 download_url = blob.generate_signed_url(expiration=3600) print(f"文件路径:{blob.name} | 下载URL:{download_url}") # 遍历当前文件夹下的子文件夹 print("\n当前文件夹下的子文件夹:") for folder_prefix in result.prefixes: print(f"子文件夹路径:{folder_prefix}")
扩展说明
- 如果需要递归获取指定文件夹下所有层级的文件(包括子文件夹里的文件),只需移除
delimiter='/参数,list_blobs()会返回prefix路径下的所有文件。 - 确保你的服务账号拥有Firebase Storage的读取权限,否则会抛出权限错误。
generate_signed_url的expiration参数可根据需求调整,单位为秒,也可以传入datetime对象指定过期时间。
内容的提问来源于stack exchange,提问作者Ali fareeq
相关产品推荐
相关产品推荐

