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

使用Bearer Token通过Google Cloud Storage SDK上传GCS文件遇认证错误求解

问题解决:使用Bearer Token通过Google Cloud Storage SDK上传文件

你的代码报错的核心原因是:初始化storage.Client时没有显式指定project参数,SDK会尝试自动检测默认凭证(比如环境变量、元数据服务器等),这就触发了DefaultCredentialsError——哪怕你已经传了自定义的Credentials。另外你的代码还有个语法错误:导入Credentials时少了import关键字。

下面是修正后的完整代码,完全对应你原来的REST API逻辑,同时保留SDK自动选择上传类型的特性:

from google.oauth2.credentials import Credentials
from google.cloud import storage

def put_in_storage(bucket_name, blob_name, content, access_token, project):
    # 创建Credentials对象,若token需要刷新,可补充refresh_token和token_uri参数
    credentials = Credentials(access_token)
    # 必须显式传入project,避免SDK自动检测默认凭证
    gcs_client = storage.Client(credentials=credentials, project=project)
    bucket = gcs_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)
    # 匹配原REST请求的Content-Type,确保元数据正确
    blob.upload_from_string(data=content, content_type='application/json')

关键注意点

  • 显式指定project是必须的:这会跳过SDK的自动凭证检测流程,直接使用你传入的Bearer Token
  • 补充content_type参数:和你REST请求里的Content-Type保持一致,确保GCS存储的文件元数据正确
  • 若Token存在过期场景:可以在创建Credentials时添加refresh_token和token_uri,SDK会自动处理凭证刷新

这样修改后,SDK就会根据你上传的内容大小自动选择多部分上传或可恢复上传,完全满足你的需求。

内容的提问来源于stack exchange,提问作者Kallie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:03:20