这是我第一次使用 Google Storage json api,我正在尝试使用 python 客户端库将简单的图像文件上传到存储桶。似乎我正确地获取了凭据(应用程序默认值),因为当我向 discovery.build() 方法提供凭据时,我可以列出存储桶的内容,然后当我不提供凭据时,相同的列表调用失败。就 ACL 而言,我可能不是 100% 确定如何设置一般的访问控制,但我非常有信心这不是问题,因为之后我也尝试在 Compute Engine VM 上执行我的脚本在控制台中使用 Cloud Storage API READ 和 WRITE 访问对其进行配置。
此外,当您收到 502 Bad Gateway 响应时,我知道文档建议立即重试(使用“指数回退”),但我现在每次尝试几个小时时都会收到此错误。所以,要么是谷歌存储服务在某些方面坏了,要么我的客户端坏了,对吧?更进一步,我可以在命令行上使用 推送 jpeg 文件gsutil cp ...
,这让我觉得我坏了而不是谷歌,并且存储桶可以用我的默认凭据写入。听起来不错?
这是我非常简单的客户端脚本,它是从这个官方样本中经过陪审团操纵的:
import json
from apiclient import discovery
from apiclient.http import MediaFileUpload
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
service = discovery.build('storage', 'v1', credentials=credentials)
image = MediaFileUpload('up.jpg', mimetype='image/jpeg')
req = service.objects().insert_media(bucket='somebucket', media_body=image)
resp = req.execute()
print(json.dumps(resp, indent=2))
这是我得到的痕迹:
Traceback (most recent call last):
File "upload.py", line 10, in <module>
resp = req.execute()
File "/Envs/py2.7/lib/python2.7/site-packages/oauth2client/util.py", line 140, in positional_wrapper
return wrapped(*args, **kwargs)
File "/Envs/py2.7/lib/python2.7/site-packages/googleapiclient/http.py", line 729, in execute
raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 502 when requesting https://www.googleapis.com/upload/storage/v1/b/somebucket/o?uploadType=media&alt=media returned "Bad Gateway">
我已经尝试过 python 2.7 和 python 3.5,所以我认为这不是问题(文档告诉我 google python 客户端在 3.5 中可以正常工作,但没有经过很好的测试)。此外,我已经尝试过对此的“可恢复上传”变体,根据这里,我得到了相同的、永远忠实的 502 Bad Gateway。谷歌坏了吗?请帮忙。