Подтвердить что ты не робот

Firebase Storage и Access-Control-Allow-Origin

Я пытаюсь загрузить файлы из Firebase Storage через XMLHttpRequest, но 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 'поэтому не допускается доступ.

4b9b3361

Ответ 1

Из этого сообщения в группе/списке фанеры-головоломки:

Самый простой способ настроить ваши данные для 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.

Ответ 2

Просто хочу добавить в ответ. Просто зайдите в свой проект в консоли Google (console.cloud.google.com/home) и выберите свой проект. Там откройте терминал и просто создайте файл cors.json(touch cors.json), а затем следуйте ответу и отредактируйте этот файл (vim cors.json) в соответствии с предложением @frank-van-puffelen.

Это сработало для меня. Ура!

Ответ 3

Другой подход для этого - использование Google JSON API. шаг 1: получить маркер доступа для использования с JSON API, чтобы получить маркер использования перейдите по ссылке: https://developers.google.com/oauthplayground/ Тогда поиск JSON API или хранения Выберите необходимые параметры, т.е. чтение, запись, full_access (отметьте те, которые необходимы) Следуйте процессу, чтобы получить токен доступа, который будет действителен в течение часа. Шаг 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"
         ]
      }
  ]
}'