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

如何用Python aiohttp PATCH请求更新Google Cloud Storage对象元数据?

解决aiohttp PATCH更新GCS对象元数据的问题

你的代码存在两个关键问题导致修改未生效,下面是修正方案:

1. 修正元数据结构的语法错误

你定义的initial_value_map混用了集合和字典的语法,这是无效的Python代码。GCS要求的PATCH请求体是包含metadata字段的JSON对象,其中metadata对应你要设置的键值对。正确的结构应该是:

initial_value_map = {"metadata": {"test": 0}}

2. 使用json参数而非data传递请求体

aiohttp中data参数默认会把字典编码为application/x-www-form-urlencoded格式的表单数据,但GCS的Objects Patch接口要求接收application/json格式的请求体。改用json参数的话,aiohttp会自动将字典序列化为JSON字符串,并设置正确的Content-Type请求头。

修正后的完整代码

async def send_init_value_map(sequence_name):
    """Update a blob's metadata."""
    initial_value_map = {"metadata": {"test": 0}}
    async with ClientSession() as session:
        # 使用json参数传递元数据,而非data
        response = await session.patch(url=api_url, headers=headers, json=initial_value_map)
        # 建议添加响应状态码检查,确认请求是否成功
        response.raise_for_status()
    return initial_value_map

额外注意事项

  • 确保你的api_url是GCS Objects Patch的正确端点,格式类似https://storage.googleapis.com/storage/v1/b/{bucket}/o/{object_name}
  • 若headers中手动设置了Content-Type,需确保其值为application/json,避免和json参数自动设置的头冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:15:36