首页 > 解决方案 > google.api_core.exceptions.Forbidden:403 GET

问题描述

App Engine 服务从 Firebase 存储下载媒体文件。分配的权限(角色):

存储的内容是不公开的。权限通过设置

path_service_account = 'xxxxxxx.json'
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = path_service_account

分配给服务。存储桶的权限分配给适当的角色。我还将该服务添加为会员。

该文件将临时存储在 tmp/ 中以供进一步处理。在

input_blob.download_to_filename(destination_file_name)

如下:

google.api_core.exceptions.Forbidden: 403 GET https://storage.googleapis.com/download/storage/v1/b/uploaded_videos/o/file_example_MP4_480_1_5MG.mp4?alt=media : ('请求失败,状态码', 403 , '预期之一', <HTTPStatus.OK: 200>, <HTTPStatus.PARTIAL_CONTENT: 206>)

分别

文件“/opt/python3.7/lib/python3.7/site-packages/google/resumable_media/_helpers.py”,第 96 行,在 require_status_code *status_codes google.resumable_media.common.InvalidResponse:('请求失败,状态码', 403, '预期之一', <HTTPStatus.OK: 200>, <HTTPStatus.PARTIAL_CONTENT: 206>)

编辑:单击返回消息中的文件链接后的附加信息:

{
  "error": {
    "code": 400,
    "message": "Unknown output format: media:",
    "errors": [
      {
        "message": "Unknown output format: media:",
        "domain": "global",
        "reason": "invalidAltValue",
        "locationType": "parameter",
        "location": "alt"
      }
    ]
  }
}

有趣的是,在 google 源代码 https://googleapis.dev/python/storage/latest/_modules/google/cloud/storage/blob.html 中,您可以看到添加了 '?alt: media'

_DOWNLOAD_URL_TEMPLATE = u"{hostname}/download/storage/v1{path}?alt=media"

但问题是下载文件名末尾 的冒号: https://storage.googleapis.com/download/storage/v1/b/uploaded_videos/o/file_example_MP4_480_1_5MG.mp4?alt=media

知道如何绕过这个吗?

标签: python-3.xgoogle-app-enginepermissionsgoogle-cloud-storage

解决方案


推荐阅读