Google cloud platform python、google云平台:无法从google bucket覆盖文件:CRC32不匹配

Google cloud platform python、google云平台:无法从google bucket覆盖文件:CRC32不匹配,google-cloud-platform,yaml,md5,crc32,Google Cloud Platform,Yaml,Md5,Crc32,我正在使用python3客户端连接到google Bucket,并尝试执行以下操作 下载'my_rules_file.yaml' 修改yaml文件 覆盖文件 这是我使用的代码 from google.cloud import storage import yaml client = storage.Client() bucket = client.get_bucket('bucket_name') blob = bucket.blob('my_rules_file.yaml') yaml_

我正在使用python3客户端连接到google Bucket,并尝试执行以下操作

  • 下载'my_rules_file.yaml'
  • 修改yaml文件
  • 覆盖文件
这是我使用的代码

from google.cloud import storage
import yaml

client = storage.Client()
bucket = client.get_bucket('bucket_name')
blob = bucket.blob('my_rules_file.yaml')
yaml_file = blob.download_as_string()

doc = yaml.load(yaml_file, Loader=yaml.FullLoader)
doc['email'].clear()
doc['email'].extend(["test@gmail.com"])
yaml_file = yaml.dump(doc)

blob.upload_from_string(yaml_file, content_type="application/octet-stream")

这是我从上传的最后一行得到的错误

BadRequest: 400 POST https://storage.googleapis.com/upload/storage/v1/b/fc-sandbox-datastore/o?uploadType=multipart: {
  "error": {
    "code": 400,
    "message": "Provided CRC32C \"YXQoSg==\" doesn't match calculated CRC32C \"EyDHsA==\".",
    "errors": [
      {
        "message": "Provided CRC32C \"YXQoSg==\" doesn't match calculated CRC32C \"EyDHsA==\".",
        "domain": "global",
        "reason": "invalid"
      },
      {
        "message": "Provided MD5 hash \"G/rQwQii9moEvc3ZDqW2qQ==\" doesn't match calculated MD5 hash \"GqyZzuvv6yE57q1bLg8HAg==\".",
        "domain": "global",
        "reason": "invalid"
      }
    ]
  }
}
: ('Request failed with status code', 400, 'Expected one of', <HTTPStatus.OK: 200>)
BadRequest:400 POSThttps://storage.googleapis.com/upload/storage/v1/b/fc-sandbox-datastore/o?uploadType=multipart: {
“错误”:{
“代码”:400,
“消息”:“提供的CRC32C\”YXQoSg==\”与计算的CRC32C\“EyDHsA==\”不匹配,
“错误”:[
{
“消息”:“提供的CRC32C\”YXQoSg==\”与计算的CRC32C\“EyDHsA==\”不匹配,
“域”:“全局”,
“原因”:“无效”
},
{
“消息”:“提供的MD5散列\”G/rQwQii9moEvc3ZDqW2qQ==\“与计算的MD5散列\“gqyzzuvvvv6ye57q1blg8hag==\”不匹配”,
“域”:“全局”,
“原因”:“无效”
}
]
}
}
:('Request failed with status code',400',应为其中一个',)

为什么会发生这种情况。这似乎仅适用于“.yaml文件”。

出现错误的原因是,您试图使用相同的blob对象进行下载和上载。这将不起作用。您需要两个单独的实例。。。你可以在这里找到一些很好的例子

你应该使用一个单独的blob实例来处理你正在尝试的上传,只有一个

.....
blob = bucket.blob('my_rules_file.yaml')
yaml_file = blob.download_as_string()
.....
这里需要第二个实例

....
blob.upload_from_string(yaml_file, content_type="application/octet-stream")
...

出现错误的原因是,您试图使用相同的blob对象进行下载和上载。这将不起作用。您需要两个单独的实例。。。你可以在这里找到一些很好的例子

你应该使用一个单独的blob实例来处理你正在尝试的上传,只有一个

.....
blob = bucket.blob('my_rules_file.yaml')
yaml_file = blob.download_as_string()
.....
这里需要第二个实例

....
blob.upload_from_string(yaml_file, content_type="application/octet-stream")
...
嘿,类似的问题嘿,类似的问题