我正在尝试使用预先签名的发布请求将文件上传到 S3 存储桶(大致遵循此博客文章)。我的服务器(节点)使用 生成预签名的 post 请求createPresignedPost,然后将其返回给客户端(React),客户端使用它将用户生成的文件上传到我们的 S3 存储桶。
目前,POST客户端向存储桶发出的任何请求都会失败,并显示405 Method Not Allowed。我检查了响应标头,发现Allow标头没有列出POST,尽管Access-Control-Allow-Methods确实列出了。
我还需要执行其他操作才能允许对存储桶进行 POST 请求吗?
(注意 - 我尝试使用预签名POST请求而不是常规预签名网址(使用PUT)的原因是因为我需要指定文件类型和大小的限制,后者似乎不支持)
S3 存储桶没有策略。它确实有一个 CORS 政策,即
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"POST",
"PUT",
"HEAD",
"DELETE"
],
"AllowedOrigins": [
"http://localhost:3000",
"http://localhost:8000",
...
],
"ExposeHeaders": [
"ETag",
"x-amz-meta-custom-header"
]
}
]
Run Code Online (Sandbox Code Playgroud)
用于生成预签名 POST 请求的服务器端代码:
[
{
"AllowedHeaders": [ …Run Code Online (Sandbox Code Playgroud)