You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在树莓派端生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:42:30