AWS JS SDK 中 listBuckets 的 CORS 错误

CORS error with listBuckets in AWS JS SDK

我正在尝试使用 AWS JS SDK 在前端列出与授权用户关联的存储桶。

listBuckets API 文档: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listBuckets-property

而且,listBucket 请求失败并显示以下错误消息:

https://s3-us-west-2.amazonaws.com/. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://palombpramalis.local:8888' is therefore not allowed access. The response had HTTP status code 403.

如何为 https://s3-us-west-2.amazonaws.com/ 配置 CORS?

AWS 文档仅讨论为特定存储桶配置 CORS http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-configuring.html。 但是这个请求是为了列出经过身份验证的用户的所有存储桶。

S3 区域端点,例如 s3-region.amazonaws.com 不支持 CORS。 CORS 仅在存储桶上受支持(在您启用它之后)。所以你不能调用 listBuckets。如果 AWS 启用此功能,那就太好了,但可能有令人信服的理由不这样做。

如果需要,您可以通过网络客户端中的 hard-coding 存储桶名称(不理想)或通过在可读 JSON 文件中维护存储桶列表来解决此问题存储在 S3 中。就个人而言,我更喜欢后者,并会尝试使用 AWS Lambda 来维护文件。当然,您也可以要求用户提供存储桶名称,但他们通常不知道。