如何用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
相关产品推荐
相关产品推荐

