如何在树莓派端生成Firebase Storage已上传图片的URL并同步至Firebase实时数据库
实现树莓派自动获取Firebase Storage图片URL并写入实时数据库的方案
我完全懂你想要实现的效果——树莓派把图片传到Firebase Storage后,自动拿到图片的访问URL,再把这个URL自动写到Firebase实时数据库里,不用再手动复制粘贴。下面就给你一套完整的Python实现方案,毕竟树莓派上用Python开发最顺手:
1. 先搞定依赖和配置准备
首先在树莓派上安装必要的Python包:
pip install firebase-admin python-dotenv
另外,你需要从Firebase控制台的「项目设置」→「服务账号」里生成并下载服务账号密钥JSON文件,把它放到树莓派的项目目录下,后续代码会用到这个文件来验证身份。
2. 初始化Firebase Admin SDK
先写一段初始化代码,把Storage和实时数据库都连接上:
import firebase_admin from firebase_admin import credentials, storage, db import datetime # 如果用签名URL的话需要这个 # 初始化Firebase Admin SDK cred = credentials.Certificate("path/to/your/serviceAccountKey.json") # 替换成你的Storage桶名称和实时数据库URL firebase_admin.initialize_app(cred, { 'storageBucket': 'your-project-id.appspot.com', 'databaseURL': 'https://your-project-id.firebaseio.com/' }) # 获取Storage桶实例和实时数据库引用 bucket = storage.bucket() # 这里的节点路径可以自定义,比如你想把URL存在image_records下就改这个 db_ref = db.reference('image_urls')
3. 上传图片+获取访问URL
上传图片后,有两种方式获取URL:公开可读的永久URL,或者带有效期的签名URL(更安全,适合私有资源),你可以按需选择:
def upload_and_get_url(local_image_path, storage_image_name): # 上传本地图片到Firebase Storage blob = bucket.blob(storage_image_name) blob.upload_from_filename(local_image_path) # 方式1:生成公开可读的永久URL(适合不需要保密的图片) blob.make_public() download_url = blob.public_url # 方式2:生成带有效期的签名URL(适合私有图片,比如有效期7天) # download_url = blob.generate_signed_url(expiration=datetime.timedelta(days=7)) return download_url
4. 把URL写入实时数据库
拿到URL后,直接写入你指定的数据库节点就行,还可以自定义图片的标识ID:
def save_url_to_db(image_url, image_id=None): # 如果有自定义的图片ID(比如时间戳、设备ID),就用它当键 if image_id: db_ref.child(image_id).set(image_url) # 没有的话就让Firebase自动生成唯一键 else: new_entry_ref = db_ref.push() new_entry_ref.set(image_url) print(f"URL已成功写入数据库:{image_url}")
5. 整合完整流程
把上面的函数串起来,执行完整的上传→取URL→写数据库流程:
if __name__ == "__main__": # 替换成你的本地图片路径和Storage里要保存的文件名(可以加路径分类,比如images/xxx.jpg) local_image_path = "/home/pi/captured_photo.jpg" storage_target_name = "raspberrypi_images/20240520_1430.jpg" # 上传并获取URL image_url = upload_and_get_url(local_image_path, storage_target_name) # 写入数据库,这里可以传自定义ID,比如用当前时间戳 # save_url_to_db(image_url, image_id="202405201430") save_url_to_db(image_url)
一些注意点
- 确保树莓派的网络稳定,不然上传和数据库写入可能会失败
- 服务账号密钥文件要妥善保管,别泄露给其他人,否则对方能操作你的Firebase资源
- 如果用公开URL,要确认图片的访问权限设置正确;用签名URL的话,记得根据需求调整有效期
- 数据库的节点路径可以根据你的业务需求修改,比如按设备、日期分类存储URL
内容的提问来源于stack exchange,提问作者JAWAD KHAN
相关产品推荐
相关产品推荐

