【问题标题】:S3 upload on https with dots in bucket nameS3 在 https 上上传,存储桶名称中带有点
【发布时间】:2016-02-29 17:24:18
【问题描述】:

我一直在尝试在使用 https 的网站上实现 ajax 上传到亚马逊的 S3,所以当然我还必须上传到 S3 的安全版本 https://bucket.name.s3.amazonaws.com。但是,当我尝试此上传时,我最终收到一个错误,即该站点的安全证书无效。从我阅读的内容来看,这是意料之中的,因为亚马逊的 s3 证书仅涵盖一级子域(http://shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.html)。因此,我将要上传的 URL 更改为 https://s3.amazonaws.com/bucket.name,从我也读过的内容来看,它应该等同于 https://bucket.name.s3.amazonaws.com。但是,在那里上传的尝试给了我一个 301 永久重定向错误。我知道我的代码有效,因为当我尝试将名称中没有点的存储桶上传到https://bucket.s3.amazonaws.com 时,它运行良好,但是当我尝试https://s3.amazonaws.com/bucket 时它也得到了 301。

 <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 存储桶?

【问题讨论】:

  • 你的bucket在哪个区域?您的操作方式仅适用于美国标准的存储桶。
  • @Michael-sqlbot us-west-2

标签: amazon-s3 https


【解决方案1】:

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

Amazon S3 在所有区域都支持虚拟托管式和路径式访问。但是,路径样式语法要求您在尝试访问存储桶时使用特定于区域的端点。例如,如果您有一个名为 mybucket 的存储桶位于欧盟,您想使用路径样式语法,并且对象名为 puppy.jpg,则正确的 URI 为http://s3-eu-west-1.amazonaws.com/mybucket/puppy.jpg。如果您尝试使用路径样式语法访问美国东部(弗吉尼亚北部)区域以外的存储桶,您将收到“PermanentRedirect”错误、HTTP 响应代码 301 和一条消息,指示您的资源的正确 URI 是什么使用以下任一:

【讨论】:

    猜你喜欢
    • 2017-04-19
    • 1970-01-01
    • 2015-02-23
    • 2011-01-20
    • 2021-08-08
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多