Firebase 存储 - 通过 Python google-cloud-storage lib 上传 png 图像时出错

Mar*_*ndo 5 google-cloud-storage firebase-storage

我正在运行基于 Firebase 实时数据库和 Firebase 存储的网络应用程序。

我需要每小时通过 Python google-cloud-storage lib 将新图像上传到 Firebase google 存储桶。这是文档

我的图片上传代码(img_src 路径正确):

    bucket = storage.bucket()
    blob = bucket.blob(img_src)
    blob.upload_from_filename(filename=img_path, content_type='image/png')
Run Code Online (Sandbox Code Playgroud)

图像似乎已成功上传,但在 Firebase 存储中手动查看时,无法加载。所有图像的规格似乎都是正确的。请将手动上传的图像(加载正常)的规格与损坏的图像进行比较。

在此处输入图片说明

在此处输入图片说明

感谢帮助!

hem*_*cio 13

每当您使用 Firebase 控制台上传图像时,都会自动生成访问令牌。但是,如果您使用任何 Admin SDK 或 gsutil 上传图像,则需要自己手动生成此访问令牌

以下示例介绍了如何使用 Admin Python SDK 为图像生成和设置访问令牌

import firebase_admin
from firebase_admin import credentials
from firebase_admin import storage

# Import UUID4 to create token
from uuid import uuid4

cred = credentials.Certificate("path/to/your/service_account.json")
default_app = firebase_admin.initialize_app(cred, {
    'storageBucket': '<BUCKET_NAME>.appspot.com'
})

bucket = storage.bucket()
blob = bucket.blob(img_src)

# Create new token
new_token = uuid4()

# Create new dictionary with the metadata
metadata  = {"firebaseStorageDownloadTokens": new_token}

# Set metadata to blob
blob.metadata = metadata

# Upload file
blob.upload_from_filename(filename=img_path, content_type='image/png')
Run Code Online (Sandbox Code Playgroud)

这是快速解释:

  • 导入 UUID4 库以创建令牌。 from uuid import uuid4
  • 创建一个新的 UUID4。 new_token = uuid4()
  • 使用键值对创建一个新字典。 metadata = {"firebaseStorageDownloadTokens": new_token}
  • 将其设置为 blob 的元数据。 blob.metadata = metadata
  • 上传文件。 blob.upload_from_filename(...)

此解决方案可用于任何 Admin SDK。

Firebase 支持人员表示正在修复此问题,但我认为遇到此问题的任何人都应该这样做,而不是等待Firebase修复此问题。