Javascript 使用POST从浏览器直接将文件上载到S3
与这个问题类似: 我已经设置了一个Cloudfront发行版,它具有一个可以访问S3源的源访问标识 S3有一个CORS配置,允许从任何来源进行PUT、POST、GET等操作。Cloudfront正在将源站、访问控制请求头和访问控制请求方法头转发到S3源站 我使用Dropzone js库配置了一个到Cloudfront端点的上传后请求 响应:不允许使用405方法 和响应标题:Javascript 使用POST从浏览器直接将文件上载到S3,javascript,amazon-web-services,amazon-s3,Javascript,Amazon Web Services,Amazon S3,与这个问题类似: 我已经设置了一个Cloudfront发行版,它具有一个可以访问S3源的源访问标识 S3有一个CORS配置,允许从任何来源进行PUT、POST、GET等操作。Cloudfront正在将源站、访问控制请求头和访问控制请求方法头转发到S3源站 我使用Dropzone js库配置了一个到Cloudfront端点的上传后请求 响应:不允许使用405方法 和响应标题: 访问控制允许方法HEAD、GET、PUT、POST 访问控制允许源* 允许HEAD、DELETE、GET、PUT 服务
- 访问控制允许方法HEAD、GET、PUT、POST
- 访问控制允许源*
- 允许HEAD、DELETE、GET、PUT
- 服务器AmazonS3
- 来自cloudfront的x-cache错误
- x-cache:cloudfront未命中
- 访问控制允许方法HEAD、GET、PUT、POST
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden
我不确定S3是否隐式拒绝POST请求。只要PUT请求有效,那就好了
CORS配置:
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
s3:*就是尝试让它开始工作
为什么不允许将POST发送到S3源站?
为什么上载的文件已损坏/不可读
我也尝试过类似于下面方法的预签名URL,但面临类似的问题。POST被拒绝,PUT被拒绝访问。我在多个桶上试过这个。它唯一的工作方式是启用公共写入。
编辑:
这个问题非常相似,但似乎没有得到解决。
为什么不允许将POST发送到S3源站
POST
不支持使用OAI在CloudFront中请求S3源站
发件人:
不支持POST请求
为什么不允许将POST发送到S3源站
POST
不支持使用OAI在CloudFront中请求S3源站
发件人:
不支持POST请求
上载的文件未损坏。您的IAM用户无权调用Head对象,即元数据。您是否可以尝试使用s3 all access帐户来确认这是一个访问问题?我相信我用来检查的密钥以及控制台访问帐户都具有完全访问权限。我创建了bucket,在S3中没有我不能做的事情。除非我用这种方法上传文件。此外,打开公共读取不会让我访问上载的文件上载的文件没有损坏。您的IAM用户无权调用Head对象,即元数据。您是否可以尝试使用s3 all access帐户来确认这是一个访问问题?我相信我用来检查的密钥以及控制台访问帐户都具有完全访问权限。我创建了bucket,在S3中没有我不能做的事情。除非我用这种方法上传文件。另外,打开公共阅读并不能让我访问上传的文件,这就解释了这一点。链接页面还讨论了通过Cloudfront到S3的PUT请求所需的“x-amz-content-sha256”头。这是我第一次看到这个要求,但它可能解释了这个问题的另一部分。@comfytoday我不确定放置对象时损坏的数据。正如您所注意到的,可能是缺少了一些标题。这就解释了这一点。链接页面还讨论了通过Cloudfront到S3的PUT请求所需的“x-amz-content-sha256”头。这是我第一次看到这个要求,但它可能解释了这个问题的另一部分。@comfytoday我不确定放置对象时损坏的数据。正如您所注意到的,可能是缺少了一些标题。
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXX"
},
"Action": [
"s3:*",
"s3:PutObject",
"s3:GetObject",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::example-bucket.net/*"
}