我一直在尝试在使用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存储桶?
答案 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>
与存储区所在区域不同的区域的端点,例如,http://s3-eu-west-1.amazonaws.com表示在美国西部(北加利福尼亚州)区域创建的存储区