防火基地存储和访问控制-允许-起源

我试图通过一个 XMLHttpRequest 从 Firebase Storage 下载文件,但是没有在资源上设置访问控制-允许-起源,所以这是不可能的。有没有办法在存储服务器上设置这个头?

  (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/[编辑] 请求的标头上没有“访问控制-允许-起源”标头 因此,原产地「 http://localhost:3449」是不允许的 进入。

100489 次浏览

来自 发表在火力基地-讨论组/名单:

为 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
}
]

然后,运行以下命令(用 bucket 的名称替换 "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的文档。

以上内容现在也包含在 CORS 配置的 Firebase 文档中

只是想补充一下答案。只需在 google 控制台( console.cloud.google.com/home )中进入你的项目,选择你的项目。打开终端,创建 cors.json 文件(touch cors.json) ,然后按照@frank-van-puffelen 的建议,编辑这个文件(vim cors.json)

这招对我管用,干杯!

另一种方法是使用 GoogleJSON API。 步骤1: 获取与 JSON API 一起使用的访问令牌 要获得令牌使用,请转到: https://developers.google.com/oauthplayground/ 然后搜索 JSON API 或存储 选择所需的选项,即 read、 write、 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"
]
}
]
}'

谷歌云现在有一个内联编辑器,使这个过程更加容易。不需要在本地系统上安装任何东西。

  1. 打开 控制台并通过单击顶部导航栏中的 >_图标按钮启动云终端会话。
  2. 单击铅笔图标打开编辑器,然后创建 cors.json文件。
  3. 运行 gsutil cors set cors.json gs://your-bucket

enter image description here

我工作的一个项目使用火库存储和最终用户需要一种方式来下载他们上传的文件。当用户试图下载文件时,我得到了一个 cors 错误,但经过一些研究后,我解决了这个问题。 我是这么想的:

  1. 下载 Google Cloud CLI
  2. 使用 CLI 登录
  3. 在 project 目录中创建 cors.json 文件,并键入以下代码。
[
{
"origin": ["*"],
"method": ["GET"],
"maxAgeSeconds": 3600
}
]
  1. 使用 Google Cloud CLI 导航到包含 cors.json 的目录
  2. 在 CLI 类型中: gsutil cors set cors.json gs://<app_name>.appspot.com