bugfix> cors > 投稿

Pythonを使用してクラウドストレージバケットのCORS設定が設定されていません。

私は次の手順に従っています: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 件
  • bucket.cors  各CORSポリシーのシーケンスマッピングです。

    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)
    
    

    オリジンは、Storage JSON API Webドキュメントに記載されているCORS応答ヘッダーを受信するオリジンのリストであることに注意してください。他のポリシーも正しい値タイプで渡す必要があります。

    この方法で各ポリシーを個別に追加することもできます。

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

あなたの答え