web-dev-qa-db-ja.com

Firebase StorageおよびAccess-Control-Allow-Origin

XMLHttpRequestを使用してFirebase Storageからファイルをダウンロードしようとしていますが、Access-Control-Allow-Originがリソースに設定されていないため、できません。ストレージサーバーにこのヘッダーを設定する方法はありますか?

  (let [xhr (js/XMLHttpRequest.)]
    (.open xhr "GET" url)
    (aset xhr "responseType" "arraybuffer")
    (aset xhr "onload" #(js/console.log "bin" (.-response xhr)))
    (.send xhr)))

Chromeエラーメッセージ:

XMLHttpRequestをロードできません https://firebasestorage.googleapis.com/ [EDITED] 要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン ' http:// localhost:3449 'はアクセスを許可されていません。

50
Blacksad

これから firebase-talkグループ/リストに投稿

CORS用にデータを設定する最も簡単な方法は、gsutilコマンドラインツールを使用することです。 gsutilのインストール手順は https://cloud.google.com/storage/docs/gsutil_install で入手できます。 gsutilをインストールし、それで認証したら、それを使用してCORSを構成できます。

たとえば、カスタムドメインからのオブジェクトのダウンロードのみを許可する場合は、このデータをcors.jsonという名前のファイルに配置します("https://example.com"をドメインに置き換えます)。

[
  {
    "Origin": ["https://example.com"],
    "method": ["GET"],
    "maxAgeSeconds": 3600
  }
]

次に、次のコマンドを実行します("exampleproject.appspot.com"をバケットの名前に置き換えます):

gsutil cors set cors.json gs://exampleproject.appspot.com

設定する必要があります。

より複雑なCORS設定が必要な場合は、 https://cloud.google.com/storage/docs/cross-Origin#Configuring-CORS-on-a-Bucket のドキュメントをご覧ください。

101

答えに加えたいだけです。 Googleコンソール(console.cloud.google.com/home)でプロジェクトに移動し、プロジェクトを選択するだけです。そこでターミナルを開き、cors.jsonファイル(touch cors.json)を作成し、回答に従って@ frank-van-puffelenの提案に従ってこのファイル(vim cors.json)を編集します。

これは私のために働いた。乾杯!

10
Aakash

これを行う別のアプローチは、Google JSON APIを使用することです。ステップ1:JSON APIで使用するアクセストークンを取得するトークンの使用を取得するには、 https://developers.google.com/oauthplayground/ に移動しますJSON APIまたはストレージの検索必要なオプション(read、write、full_accessを選択)を選択します(必要なオプションを選択します)。プロセスに従って、1時間有効なアクセストークンを取得します。ステップ2:トークンを使用してGoogle JSON APIをヒットしてCORSを更新する

サンプルカール:

    curl -X PATCH \
  'https://www.googleapis.com/storage/v1/b/your_bucket_id?fields=cors' \
  -H 'Accept: application/json' \
  -H 'Accept-Encoding: gzip, deflate' \
  -H 'Authorization: Bearer ya29.GltIB3rTqQ2tJgh0cMj1SEa1UgQNJnTMXUjMlMIRGG-mBCbiUO0wqdDuEpnPD6cbkcr1CuLItuhaNCTJYhv2ZKjK7yqyIHNgkCBup-T8Z1B1RiBrCgcgliHOGFDz' \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: d19f29ed-2e80-4c34-85ee-c46c9058fac0' \
  -H 'cache-control: no-cache' \
  -d '{
  "location": "us",
  "storageClass": "Standard",
  "cors": [
      {
          "maxAgeSeconds": "360000000",
          "method": [
             "GET",
             "HEAD",
             "DELETE"
          ],
          "Origin": [
             "*"
          ],
          "responseHeader":[
            "Content-Type"
         ]
      }
  ]
}'
0
nimesh makwana