在https上使用存储桶名称

时间:2016-02-29 17:24:18

标签: amazon-s3 https

我一直在尝试在使用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,它经历了很好,但是当我尝试时它也获得了301 {{3 }}。

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

所以我的问题是:有没有办法在名称超过https的点上实现ajax上传到S3存储桶?

1 个答案:

答案 0 :(得分:2)

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

  

Amazon S3支持所有地区的虚拟托管式和路径式访问。但是,路径样式语法要求您在尝试访问存储桶时使用特定于区域的端点。例如,如果您有一个名为mybucket的存储桶驻留在EU中,您希望使用路径样式语法,并且该对象名为puppy.jpg,正确的URI为http://s3-eu-west-1.amazonaws.com/mybucket/puppy.jpg。您将收到一个&#34; PermanentRedirect&#34;如果您尝试使用使用以下任一方式的路径样式语法访问美国东部(弗吉尼亚北部)区域之外的存储桶,则会出现错误,HTTP响应代码301以及指示资源正确URI的消息: / p>