使用python客户端无法设置Google Cloud存储桶CORS配置

时间:2018-05-25 06:20:15

标签: cors google-cloud-storage google-cloud-python

云存储桶的CORS配置未使用python进行设置。

我遵循以下步骤:http://google-cloud-python.readthedocs.io/en/latest/storage/buckets.html#google.cloud.storage.bucket.Bucket.cors

即,

>>> policies = bucket.cors
>>> policies.append({'origin': '/foo', ...})
>>> policies[1]['maxAgeSeconds'] = 3600
>>> del policies[0]
>>> bucket.cors = policies
>>> bucket.update()

如果按照上述步骤进行了桶的CORS配置,则会给出一个空列表。

1 个答案:

答案 0 :(得分:0)

bucket.cors is a sequence mapping of each CORS policy

由于您没有准确分享您更新CORS条目的方式,因此我假设您要传递要附加的多个键值对的字典。这会无声地失败,因为它与策略条目的预期模式不匹配。

相反,写一下

import os
os.environ.update(
    {'GOOGLE_APPLICATION_CREDENTIALS': '<path-to-your-key-file>'}
)

import google.cloud.storage

storage_client = google.cloud.storage.Client()

bucket_name = '<your-bucket-name>'
bucket = storage_client.get_bucket(bucket_name)

policies = bucket.cors
policies.extend([
    {'origin': ['http://hello-world.example']},
    {'maxAgeSeconds': 3600}
])
bucket.cors = policies
bucket.update()
print(bucket.cors)

请注意,原始列表是接收CORS响应标头的原始列表,如Storage JSON API web document中所述。其他策略也必须使用正确的值类型传递。

您还可以选择以这种方式单独附加每个政策:

...
policies.append(
    {'origin': ['http://hello-world.example']},
)
policies.append(
    {'maxAgeSeconds': 3600}
)