【发布时间】: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