2016-04-14 122 views
1

我正在嘗試使用Amazon S3上傳簡單的JS圖像。以下是我的代碼。通過XMLHttpRequest將文件上傳到Amazon S3公開

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 ost罰款,但上傳的文件不公開。而且,我甚至無法通過網絡界面將它們設置爲公開。我唯一能做的就是刪除它們。我真的需要這些文件公開。

如果可能的話,我真的很想在不使用任何訪問鍵的情況下完成此操作。

任何幫助真的很感激!

+0

你知道你做了什麼,在這裏?您的存儲區可以匿名上傳。由任何人,從任何地方,沒有證書需要。這就是爲什麼你不能修改對象 - 你甚至不擁有它們......但它們在你的存儲桶中,所以你爲它們付錢,這就是爲什麼你仍然被允許刪除它們的原因。你真的需要回頭閱讀簽名和認證請求。不要試圖「修復」這一點。你有更大的問題。 –

+0

謝謝你的建議。我知道發生了什麼事。我只想讓它工作,然後將其限制到單個域。你是說我還有**要簽署一切嗎? –

+0

@ Michael-sqlbot請你澄清一下:是否有可能在沒有簽署請求的情況下公開提供上傳的文件? –

回答

1

我想通了。

JS

  • 改變hostmy.bucket.s3.eu-central-1.amazonaws.com
  • 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