云存储CORS

时间:2018-09-10 19:42:37

标签: cors google-cloud-storage

我已将Google Earth Engine中的地图导出到具有公共访问权限(allUsers)的云存储桶中。存储桶中的格式是带有.png扩展名的地图图块。

我还使用gsutil设置了我的CORS设置,如下所示:

[
    {
      "origin": ["*"],
      "responseHeader": ["Authorization", "Content-Range", "Accept", "Content-Type", "Origin", "Range"],
      "method": ["GET"],
      "maxAgeSeconds": 300
    }
]

但是尝试访问这些地图图块(使用Leaflet tileLayer)时,我在Chrome开发人员工具中收到了CORB(跨原点读取阻止)错误,但未显示任何内容。

我在Chrome DT中的响应标头显示以下内容:

cache-control: no-cache, no-store, max-age=0, must-revalidate
content-type: text/html; charset=utf-8
expires: Mon, 01 Jan 1990 00:00:00 GMT

如何解决此问题?

2 个答案:

答案 0 :(得分:2)

如果您想使所有存储桶都公开可见,则需要提供IAM policies,只需运行:

gsutil iam ch allUsers:objectViewer gs://youBucketName

更新:   您必须使用的要点是:

"https://storage.googleapis.com/bucketName/ObjectName"

来自documentation

  

所有对storage.cloud.google.com URI的请求都需要身份验证。即使allUsers有权访问对象,这也适用。如果希望用户下载未经身份验证的匿名对象而不进行身份验证,请使用Direct API请求中记录的storage.googleapis.com URI。有关详细信息和示例,请参阅访问公共数据。

您直接使用https://console.cloud.google.com/storage,这就是为什么您会遇到此错误的原因

示例:

您有: https://console.cloud.google.com/storage/browser/logs1tiles/centralKansas/8/58/99

应为: https://storage.googleapis.com/logs1tiles/centralKansas/8/58/99

答案 1 :(得分:0)

最后弄明白了。在Leaflet中,tileLayer的格式应为tms = false,扩展名为.png。

With inv_twcg_ws
    For Each cell In .Range("G2:G" & .Cells(Rows.Count, "A").End(xlUp).Row)
        cell.Value = Application.WorksheetFunction.IfError(Application.VLookup(CStr(cell.Value), report_rng, 1, True), "No")
    Next cell
End With