调用Google Photos API批量添加媒体项至相册遇400无效ID错误
排查Google Photos API batchAddMediaItems的INVALID_ARGUMENT错误
我来帮你定位这个问题,你遇到的400: Request contains an invalid media item id错误,结合你的代码和场景,大概率和以下几个点有关:
1. 缺失关键的请求头
你的代码构造POST请求时,没有设置Content-Type: application/json头!这是最常见的问题——服务器收到请求后,无法正确解析你发送的JSON格式body,进而错误地判定媒体项ID无效。
修改代码,在创建req对象后添加这个请求头:
req, err := http.NewRequest("POST", u.String(), bytes.NewBuffer(bodyData)) if err != nil { return err } // 必须添加这个头,告知服务器请求体是JSON格式 req.Header.Set("Content-Type", "application/json") resp, err := a.service.client.Do(req)
2. OAuth权限范围不匹配
你获取媒体项ID时使用的OAuth授权权限,可能和执行batchAddMediaItems所需的权限不匹配:
- 如果获取媒体项时用的是
photoslibrary.readonly只读权限,那么拿到的ID无法用于修改操作(比如添加到相册); batchAddMediaItems需要至少photoslibrary.appendonly权限,或者更全面的photoslibrary权限(生产环境建议用最小必要权限)。
请确认你的OAuth授权流程中,请求了正确的权限范围。
3. 媒体项ID的有效性验证
虽然你提到媒体项的ProductURL有效,但还是建议你:
- 打印日志输出要添加的
ids数组,确认每个ID都是完整的、无多余空格的字符串(API使用的媒体项ID通常是类似AF1QipM...的长随机字符串); - 如果你操作的是共享相册中的媒体项,需要确保你拥有将该媒体项添加到目标相册的权限(比如目标相册是你自己创建的,且你对共享媒体项有访问权限)。
4. 批量请求的边界检查
你的代码已经控制了每次批量最多50个ID,这符合Google Photos API的限制(batchAddMediaItems单次请求最多支持50个媒体项),这部分是没问题的。
先尝试添加Content-Type请求头,这应该能解决绝大多数这类问题,如果还是报错再检查权限和ID格式。
内容的提问来源于stack exchange,提问作者Morangorin
相关产品推荐
相关产品推荐

