[英]Upload file to S3 direct from the browser using POST
類似於這個問題: 在 AWS CloudFront 上啟用 POST/PUT/DELETE?
我已經使用可以訪問 S3 源的源訪問身份設置了一個 Cloudfront 分發。
S3 有一個 CORS 配置,允許來自任何源的 PUT、POST、GET 等。 Cloudfront 將 Origin、Access-Control-Request-Headers 和 Access-Control-Request-Method 標頭轉發到 S3 源。
使用 Dropzone-js 庫,我配置了一個到 Cloudfront 端點的 POST 上傳請求。
響應:405 方法不允許
和響應頭:
如果我將請求方法切換為“PUT”,則上傳響應成功。
200 正常
神秘的“允許”標頭現在不見了。
在 PUT 請求之后在 S3 中結束的文件不可讀。 我在嘗試下載時收到拒絕訪問錯誤。
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>
桶策略:
{
"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/*"
}
s3:* 是嘗試讓它開始工作。
為什么不允許 POST 到 S3 Origin? 為什么上傳的文件損壞/不可讀?
我也嘗試過類似於下面的方法的預簽名 URL,但面臨類似的問題。 POST 被拒絕,PUT 被拒絕訪問。 我在多個桶上試過這個。 它可以工作的唯一方法是啟用公共寫入。 https://aws.amazon.com/blogs/media/deep-dive-into-cors-configs-on-aws-s3-how-to/
編輯:這個問題非常相似,但似乎沒有得到解決。 dropzone.js 使用 content-type 直接上傳到 S3
為什么不允許 POST 到 S3 Origin?
根本不支持使用 OAI 在 CloudFront 中對 S3 源的POST
請求。
從在僅支持簽名版本 4 身份驗證的 Amazon S3 區域中使用 OAI :
不支持 POST 請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.