我正在尝试使用角度客户端将文件上传到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>
答案 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
部分-并对其进行了修复??♂️
所以现在是