Я пытаюсь загрузить файлы из 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/[ИЗМЕНИТЬ] Заголовок Access-Control-Allow-Origin отсутствует в запрошенном ресурс. Следовательно, источник 'http://localhost: 3449' недопустим. доступ.

Ответы (4)

Из этого сообщения в группе / списке firebase-talk:

Самый простой способ настроить данные для CORS - использовать инструмент командной строки gsutil. Инструкции по установке для gsutil доступны по адресу https://cloud.google.com/storage/docs/gsutil_install. После того, как вы установили gsutil и прошли с ним аутентификацию, вы можете использовать его для настройки CORS.

Например, если вы просто хотите разрешить загрузку объектов из своего личного домена, поместите эти данные в файл с именем cors.json (заменив "https://example.com" на свой домен):

[
  {
    "origin": ["https://example.com"],
    "метод": ["ПОЛУЧИТЬ"],
    «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.

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

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

В Google Cloud теперь есть встроенный редактор, чтобы сделать этот процесс еще проще. Не нужно ничего устанавливать в вашей локальной системе.

  1. Откройте консоль GCP и запустите сеанс облачного терминала, нажав кнопку со значком > _ на верхней панели навигации.
  2. Щелкните значок карандаша, чтобы открыть редактор, затем создайте файл cors.json.
  3. Выполнить gsutil cors set cors.json gs: // your-bucket

enter image description here

Другой способ сделать это - использовать 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"
         ]
      }
  ]
}'

2022 WebDevInsider