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

问题描述 投票:1回答:1

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

我需要每小时通过Python google-cloud-storage lib将新图像上传到Firebase google bucket。这是docs

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

    bucket = storage.bucket()
    blob = bucket.blob(img_src)
    blob.upload_from_filename(filename=img_path, content_type='image/png')

图像似乎已成功上传,但是在Firebase Storage中手动查看时,它不会加载。所有图像规格似乎都是正确的。请比较手动上传的图片(加载正常)与损坏的图片的规格。

enter image description here

enter image description here

感谢您的帮助!

google-cloud-storage firebase-storage
1个回答
0
投票

[无论何时使用Firebase控制台上传图像,都将设置“访问令牌”。但是,如果您使用任何Admin SDK或gsutil上传图像,此“访问令牌”将丢失。

这里是使用Admin Python SDK上载了已设置“访问令牌”的图像的解决方案的完整代码段。

请记住,此解决方案适用于任何Admin 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')

这里是快速说明:

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

Firebase支持人员说,此问题已得到解决,但我认为每个人都应实施此解决方法。尤其是由于这个问题而停止了开发过程。

© www.soinside.com 2019 - 2024. All rights reserved.