使用预签名的URL将文件上传到Amazon S3时出现CORS错误

时间:2018-11-15 14:26:44

标签: amazon-web-services amazon-s3 cors aws-sdk

我正在尝试使用角度客户端将文件上传到Amazon S3。我已经使用NodeJs应用服务器生成了Presigned URL。将文件上传到预签名URL时,出现以下错误:

“对预检请求的响应未通过访问控制检查:所请求的资源上没有'Access-Control-Allow-Origin'标头。因此,不允许对源'http://localhost:4200'的访问。” < / p>

我已将以下CORS配置添加到我的存储桶权限中。

<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

4 个答案:

答案 0 :(得分:0)

某些浏览器不支持来自Localhost的CORS请求,例如Chrome。尝试使用lvh.me:4200进行测试。

答案 1 :(得分:0)

虽然确实是您的浏览器可能不支持localhost作为与AllowedOrigin匹配的有效来源,但您可能还需要检查从S3提取的内容是否确实具有期望的正确标头以及存储桶设置正确。您可以通过chrome开发人员工具进行此操作:https://developers.google.com/web/tools/chrome-devtools/network-performance/reference#headers

http://127.0.0.1还是localhost(在大多数操作系统上)的有效域,应该与大多数浏览器兼容,以与AllowedOrigin进行匹配。

答案 2 :(得分:0)

您要寻找的是cor_rules

s3 = boto3.resource('s3')
bucket_cors = s3.BucketCors(bucket_name='bucket_name', cors_rules=[{
"AllowedOrigins": "*",
}])

我不确定该代码是否可以工作,也许您还需要指定其他cors_rules,例如AllowedHeaders。查看文档:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#id250

答案 3 :(得分:0)

我的问题是,即使执行以下操作,我仍然遇到相同的CORS错误- 由于某些原因-getSignedUrl返回了这样的网址:

https://my-bucket.s3。我们西部2 .amazonaws.com / bucket-folder / file.jpg

我删除了区域部分-us-west-2部分-并对其进行了修复??‍♂️

所以现在是

https://my-bucket.s3.amazonaws.com/bucket-folder/file.jpg