2016-02-29 65 views
1

我一直試圖在使用https的網站上實現ajax上傳到亞馬遜的S3,所以我當然也必須上傳到S3的安全版本https://bucket.name.s3.amazonaws.com。但是,當我嘗試上傳時,我最終得到一個錯誤,表明該網站的安全證書無效。從我正在閱讀的內容來看,這是預期的,因爲亞馬遜的s3證書只覆蓋一個子域(http://shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.html)。因此,我將我上傳的網址更改爲https://s3.amazonaws.com/bucket.name,這也是我讀過的內容應該相當於https://bucket.name.s3.amazonaws.com。但是,嘗試上傳給我301永久重定向錯誤。我知道我的代碼是有效的,因爲當我試圖上傳到名稱中沒有點的桶時,它到達https://bucket.s3.amazonaws.com,但它通過很好,但是當我嘗試https://s3.amazonaws.com/bucket時它也得到301。S3在https上點上點名桶

<form id="form"> 
    <input type="hidden" name="key" value="..." /> 
    <input type="hidden" name="acl" value="public-read" /> 
    <input type="hidden" name="X-Amz-Credential" value="..." /> 
    <input type="hidden" name="X-Amz-Algorithm" value="..." /> 
    <input type="hidden" name="X-Amz-Date" value="..." /> 
    <input type="hidden" name="Policy" value="..." /> 
    <input type="hidden" name="X-Amz-Signature" value="..." /> 
    <input type="hidden" name="success_action_redirect" value="..." /> 
    <input id="upload" type="submit" value="Upload" class="submit-upload clearfix button blue save"/> 
</form> 

<script type="text/javascript"> 
    document.getElementById('upload').addEventListener('click', function (e) { 
      e.preventDefault(); 
      var formData = new FormData(document.getElementById('form')); 
      var xhr = new XMLHttpRequest(); 
      xhr.open('POST', 'https://s3.amazonaws.com/bucket.name/', true); 
      xhr.send(formData); 
    }); 
</script> 

所以我的問題是:有沒有一種方法可以實現ajax上傳到名爲https的點上的S3存儲桶?

+0

你的存儲桶在哪個區域?你這樣做的方式只適用於美國標準桶。 –

+0

@ Michael-sqlbot us-west-2 – Kai

回答

1

http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html

亞馬遜S3支持在所有區中的虛擬託管式和路徑式訪問。但是,路徑樣式語法要求您在嘗試訪問存儲區時使用區域特定的端點。例如,如果您有一個駐留在EU中的名爲mybucket的存儲桶,則希望使用路徑樣式語法,並且該對象名爲puppy.jpg,正確的URI爲http://s3-eu-west-1.amazonaws.com/mybucket/puppy.jpg。如果您嘗試使用路徑樣式語法訪問US East(N. Virginia)區域之外的存儲區,您將收到「PermanentRedirect」錯誤,HTTP響應代碼301和指示您的資源的正確URI的消息使用以下任一操作: