簡體   English   中英

使用 POST 直接從瀏覽器上傳文件到 S3

[英]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 方法不允許

和響應頭:

  • 訪問控制允許方法 HEAD、GET、PUT、POST
  • 訪問控制允許來源 *
  • 允許頭部、刪除、獲取、放置
  • 服務器 AmazonS3
  • 來自 cloudfront 的 x-cache 錯誤

如果我將請求方法切換為“PUT”,則上傳響應成功。

200 正常

  • x-cache:來自 cloudfront 的小姐
  • 訪問控制允許方法 HEAD、GET、PUT、POST

神秘的“允許”標頭現在不見了。

在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM