Google cloud platform python、google云平台:无法从google bucket覆盖文件:CRC32不匹配
我正在使用python3客户端连接到google Bucket,并尝试执行以下操作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_
- 下载'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")
...
嘿,类似的问题嘿,类似的问题