2016-04-14 14 views
1

Amazon S3で簡単なJS画像のアップロードを設定しようとしています。以下は私のコードです。Amazon S3にXMLHttpRequest経由でファイルをアップロードする

JS

host = "https://s3.eu-central-1.amazonaws.com/my.bucket.url/"; 

uploadAttachment = function(attachment) { 
    file = attachment.file; 
    key = createStorageKey(file); 
    form = new FormData; 
    form.append("key", key); 
    form.append("acl", "public-read"); 
    form.append("Content-Type", file.type); 
    form.append("file", file); 
    xhr = new XMLHttpRequest; 
    xhr.open("PUT", host + key, true); 
    // ... 
    xhr.send(form); 
}; 

createStorageKey = function(file) { 
    var date, day, time; 
    date = new Date; 
    day = date.toISOString().slice(0, 10); 
    time = date.getTime(); 
    return "s3/attachments/" + day + "/" + time + "-" + file.name; 
}; 

S3バケットポリシー

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
     { 
      "Sid": "1", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:*", 
      "Resource": "arn:aws:s3:::my.bucket.url/*" 
     } 
    ] 
} 

S3 CORS

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>*</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>PUT</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

すべてがALMの作品大丈夫ですが、アップロードされたファイルは公開されていません。さらに、私はWebインターフェイスから公開することさえできません。私ができるのは、それらを削除することだけです。私は本当にそれらのファイルを公開する必要があります。

可能であれば、私は本当にアクセスキーを使用せずにこれを達成したいと思います。

本当にありがとうございます!

+0

実現しますか?あなたのバケツは匿名のアップロードが可能です。誰でもどこからでも、信任状は必要ありません。そのため、あなたはオブジェクトを変更することができません - あなたはそれらを所有していません...しかし、彼らはあなたのバケツにあるので、あなたはそれらのために支払っている、それはまだそれらを削除することができます理由です。実際には、リクエストに署名して認証することについて、読んで読んでおく必要があります。これを "修正"しようとしないでください。あなたはもっと大きな問題を抱えています。 –

+0

ありがとうございます。私は何が起こっているのか分かります。私はそれを働かせて、それを単一のドメインに制限したいだけです。私はまだ**すべてにサインする**を持っていると言っていますか? –

+0

@ Michael-sqlbotあなたは明確にしてください:アップロードされたファイルを署名要求なしで一般公開することは可能ですか? –

答えて

1

私はそれを理解しました。

JS

  • my.bucket.s3.eu-central-1.amazonaws.comhostを変更しました。
  • xhr.open("POST", host, true)
  • おそらく無関係ですが、私はaclパラメータを削除しました。

CORS:

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>http://my.website.com</AllowedOrigin> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

S3バケットポリシー:私はちょうどそれを削除しました。

S3バケット権限:あなたはここで、やっていること Granted "Upload/Delete permissions to everyone

関連する問題