【问题标题】:Firebase Storage - error with uploading png image via Python google-cloud-storage libFirebase 存储 - 通过 Python google-cloud-storage lib 上传 png 图像时出错
【发布时间】:2020-05-21 14:58:06
【问题描述】:

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

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

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

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

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

感谢您的帮助!

【问题讨论】:

    标签: google-cloud-storage firebase-storage


    【解决方案1】:

    每当您使用 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')
    

    这里是快速解释:

    • 导入 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 解决此问题。

    【讨论】:

    • 谢谢.. 虽然我已经找到了直接使用 Google Storage 的解决方法
    • 这适用于 python 3 吗?我在“blob.upload_from_filename(filename=img_path, content_type='image/png')”这一行收到错误消息“TypeError: Object of type UUID is not JSON serializable”
    • @Martendo 你能发布你的解决方案吗?
    • @AnastasiosAndronidis 我使用标准的 Google 存储作为最快的解决方法
    • 这对我帮助很大。谢谢! :-)
    猜你喜欢
    • 1970-01-01
    • 2020-01-17
    • 2018-02-15
    • 2013-06-16
    • 2017-10-03
    • 2017-08-11
    • 2018-12-26
    • 2015-08-28
    • 1970-01-01
    相关资源
    最近更新 更多