谷歌存储python JSON客户端永久502上传媒体到存储桶

时间:2016-02-11 03:45:43

标签: python google-cloud-storage google-compute-engine google-client

这是我第一次使用Google Storage json api,我正在尝试使用python客户端库将简单的映像文件 UPLOAD 添加到存储桶中。我似乎正确获取凭据(应用程序默认值),因为当我向discovery.build()方法提供凭据时,我可以 LIST 存储桶的内容,然后当相同的列表调用失败时我不提供凭据。就ACL而言,我对于如何设置访问控制一般不是100%可靠,但是我非常有信心这不是问题,因为我也试图执行我的计算引擎VM上的脚本在使用控制台中的Cloud Storage API READ和WRITE访问进行配置后。

此外,当您收到502 Bad Gateway响应时,我知道文档提示立即重试(使用'指数退出')但我每次都会收到此错误我已经尝试了几个小时了。那么,谷歌存储服务是以某种方式破坏,还是我的客户端坏了,对吧?更进一步,我能够使用gsutil cp ...在命令行上推送jpeg文件,这让我觉得我坏了而不是谷歌,并且该存储桶可以使用我的默认凭据写入。听起来不错?

这是我非常简单的客户端脚本,这是一个由this官方样本组成的陪审团:

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中有功能,但没有经过良好测试)。此外,我已尝试过“可恢复的上传”功能。根据{{​​3}}的变化,我得到了相同的,永远忠实的502 Bad Gateway。谷歌坏了吗?请帮忙。

1 个答案:

答案 0 :(得分:0)

您需要为对象指定目标名称。我相信您需要方法service.objects().insert()而不是service.objects().insert_media()。全线将是:

req = client.objects().insert(
    bucket='somebucket',
    name='nameOfObject',
    media_body=image)

objects.insert文档页面上有a complete example

我不知道为什么你会得到502。这可能是一个错误。