Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将媒体上载到bucket时,google storage python JSON客户端为502_Python_Google Cloud Storage_Google Compute Engine_Google Client - Fatal编程技术网

将媒体上载到bucket时,google storage python JSON客户端为502

将媒体上载到bucket时,google storage python JSON客户端为502,python,google-cloud-storage,google-compute-engine,google-client,Python,Google Cloud Storage,Google Compute Engine,Google Client,这是我第一次使用Google Storage json api,我正在尝试使用python客户端库将一个简单的图像文件上传到bucket。我似乎正确地获取了凭据(应用程序默认),因为当我向discovery.build()方法提供凭据时,我可以列出bucket的内容,而当我不提供凭据时,相同的列表调用将失败。就ACL而言,我可能对如何设置访问控制没有100%的把握,但我很有信心这不是问题所在,因为在控制台中配置云存储API读写访问权限后,我还尝试在计算引擎VM上执行脚本 此外,我知道文档建议在收

这是我第一次使用Google Storage json api,我正在尝试使用python客户端库将一个简单的图像文件上传到bucket。我似乎正确地获取了凭据(应用程序默认),因为当我向discovery.build()方法提供凭据时,我可以列出bucket的内容,而当我不提供凭据时,相同的列表调用将失败。就ACL而言,我可能对如何设置访问控制没有100%的把握,我很有信心这不是问题所在,因为在控制台中配置云存储API读写访问权限后,我还尝试在计算引擎VM上执行脚本

此外,我知道文档建议在收到502错误网关响应时立即重试(使用“指数退避”),但现在我每次尝试几个小时都会遇到此错误。所以,要么谷歌存储服务在某些方面坏了,要么我的客户端坏了,对吧?更进一步,我可以使用
gsutil cp…
在命令行上推送jpeg文件,这让我觉得我已经崩溃了,而不是Google,并且bucket可以用我的默认凭据写入。听起来不错吧

这是我非常简单的客户脚本,这是一个从官方样本中伪造的陪审团:

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">
回溯(最近一次呼叫最后一次):
文件“upload.py”,第10行,在
resp=req.execute()
文件“/Envs/py2.7/lib/python2.7/site packages/oauth2client/util.py”,第140行,位于位置包装器中
已包装退货(*args,**kwargs)
文件“/Envs/py2.7/lib/python2.7/site packages/googleapiclient/http.py”,执行中的第729行
raise HttpError(resp,content,uri=self.uri)
GoogleAppClient.errors.HttpError:

我已经尝试过python 2.7和python 3.5,所以我认为这不是问题所在(文档告诉我google python client在3.5中是功能性的,但没有经过很好的测试)。另外,我尝试了一个“可恢复上传”的变化,根据,我得到了同样的,永远忠诚的502坏网关。谷歌破产了吗?请提供帮助。

您需要为对象指定目标名称。我相信您想要的是方法
service.objects().insert()
,而不是
service.objects().insert\u media()
。因此,整条线将是:

req = client.objects().insert(
    bucket='somebucket',
    name='nameOfObject',
    media_body=image)
在objects.insert documentation页面上有


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

您需要为对象指定目标名称。我相信您想要的是方法
service.objects().insert()
,而不是
service.objects().insert\u media()
。因此,整条线将是:

req = client.objects().insert(
    bucket='somebucket',
    name='nameOfObject',
    media_body=image)
在objects.insert documentation页面上有


但我不知道你为什么会得到502。那可能是个bug。

就是这样!非常感谢,就这样!非常感谢你。