0

HTML アップローダーを使用してファイルを S3 にアップロードしようとしています。このチュートリアルに従ってみました:

http://pjambet.github.com/blog/direct-upload-to-s3/

通常の HTML 形式でファイルを投稿できます。しかし、JQuery-file-upload プラグインを使用して同じフォームを投稿すると、Amazon から 403 が返されます。

ここに私のフォームがあります:

<form accept-charset="UTF-8" action="https://youboox_dev.s3.amazonaws.com" enctype="multipart/form-data" class='direct-upload' method="POST">
 <input type="hidden" name="key" value="test-file-name">
 <input type="hidden" name="AWSAccessKeyId" value="AKIZ[...]YSCA">
 <input type="hidden" name="acl" value="private">
 <input type="hidden" name="success_action_status" value="201">
 <input type="hidden" name="policy" value="<%= Facades::AmazonFacade.policy %>">
 <input type="hidden" name="signature" value="<%= Facades::AmazonFacade.signature %>">

 <input type="file" name="file">

 <input type="submit" value="Load this file">

そして、ここに私の jquery-uploader があります:

$('.direct-upload').fileupload({
      url: $(this).attr('action'),
      type: 'POST',
      autoUpload: true,
      dataType: 'xml',
      add: function (event, data) {
        jqXHR = data.submit();
      }

私はアマゾンからこの答えを得ます:

オプションhttps://youboox_dev.s3.amazonaws.com/ 200 (OK)
POST https://youboox_dev.s3.amazonaws.com/ 403 (禁止)

================================================== ======

送信ボタンからこのフォームを送信すると、Amazon から OK の応答が返され、アップロードしたばかりのファイルをダウンロードできるので、ポリシーと署名が正しいと確信しています。

<PostResponse>
  <Location>https://youboox_dev.s3.amazonaws.com/tottotoCVBNBV</Location>
  <Bucket>youboox_dev</Bucket>
  <Key>test-file-name</Key>
  <ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag>
</PostResponse>
4

1 に答える 1

0

私は同様のオプションを持っていました(直接フォームPOSTをテストしたことはありません)。私にとってそれを修正したのは、バケットポリシーを追加することでした:

{
"Version": "2008-10-17",
"Id": "Policy1347277692345",
"Statement": [
    {
        "Sid": "my-user",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::123456789:user/my-user"
        },
        "Action": [
            "s3:AbortMultipartUpload",
            "s3:GetObjectAcl",
            "s3:GetObjectVersion",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion",
            "s3:GetObject",
            "s3:PutObjectAcl",
            "s3:PutObjectVersionAcl",
            "s3:ListMultipartUploadParts",
            "s3:PutObject",
            "s3:GetObjectVersionAcl"
        ],
        "Resource": "arn:aws:s3:::my-bucket/*"
    },
    {
        "Sid": "world-readable",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::my-bucket/*"
    }
]
}

(他の誰かが設定した別のバケットからやみくもにこれをコピーしたことを認めているので、実際に必要な部分はわかりません。)

于 2012-11-07T16:19:55.753 に答える