我已经生成了预先签名的S3 POST网址。使用返回参数,然后我将其传递给我的代码,但我不断收到此错误Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
。
而在Postman上,我可以使用一个附件提交表单数据。
答案 0 :(得分:8)
您必须将 CORS配置编辑为公开,例如:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
答案 1 :(得分:1)
就我而言,我特别需要允许S3存储桶的CORS配置中的PUT方法使用预签名的URL,而不是接受的答案中的GET方法:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
答案 2 :(得分:1)
我的问题是由于某种原因-getSignedUrl
返回了这样的网址:
https://my-bucket.s3。我们西部2 .amazonaws.com / bucket-folder / file.jpg
我删除了区域部分-us-west-2
-并将其修复了????️
所以现在是
答案 3 :(得分:1)
无法评论,所以在这里添加。包含 Harvey 的回答,但采用文本形式以便于复制。
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
答案 4 :(得分:0)
我也遇到了这个问题。我在存储桶上的CORs配置似乎正确,但是我的预签名URL遇到了CORs问题。事实证明,我的AWS_REGION
的签发者未设置到存储桶的aws区域。将AWS_REGION
设置为正确的区域后,它可以正常工作。我很烦恼,CORS问题对一个简单的问题是如此困扰,浪费了我几个小时的时间。
答案 5 :(得分:0)
对我来说,这是因为我的存储桶名称中带有连字符(例如 my-bucket )。签名的URL将用下划线替换存储桶名称中的连字符,然后对其进行签名。所以这意味着两件事:
我最终不得不将存储桶重命名为不带连字符的名称(例如 mybucket ),然后在以下配置下工作正常:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
答案 6 :(得分:0)
答案 7 :(得分:0)
我的问题是我在“AllowedOrigins”域的末尾有一个斜杠 (/)。一旦我删除了斜杠,请求就会起作用。