这个问题让我有点抓狂。我正在尝试通过AJAX POST将文件上传到S3存储桶。
我的所有凭证都是正确的,因为当我执行普通的HTTP POSTs时,它会在S3存储桶中创建资源。但我真的想上传多个文件一次与进度条,因此我需要AJAX。
我在我的S3存储桶上设置了CORS:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://localhost:3000</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
现在,我只想让它在我的开发环境(localhost:3000,使用标准的Rails 4.1)中工作。
根据我的理解,上面的CORS规则应该允许从localhost:3000到S3存储桶的AJAX请求。
但是,每次我通过AJAX提交文件时,我都会收到以下错误:
XMLHttpRequest cannot load https://s3.amazonaws.com/<BUCKET>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.
这对我来说没有任何意义,因为localhost:3000是通过CORS规则授予访问权限的。
我还提供了用于提交表单的JS的一个片段:
$.ajax({
method: "POST",
crossDomain: true,
url: "https://s3.amazonaws.com/<BUCKET>",
data: $(this).serialize() # Contains S3 necessary values
})
该表单包含必需的亚马逊S3密钥等输入。我知道它们是有效的,因为当我执行普通的HTTP POSTs时,它会在S3中正确地创建资产。我所要做的就是AJAXify这个过程。
我是不是漏掉了什么明显的东西?
使用:Rails4.1,jquery-file-upload,fog gem (用于S3)
发布于 2014-12-17 16:51:49
您可以尝试通过更改
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
发布于 2015-06-03 20:59:43
你的问题似乎与我的问题非常相似,也没有得到正确(准确)的回答,而且似乎是一个与浏览器限制有关的问题,而不是它背后的实际传输技术。
这里有一个链接,指向我最初的问题和我在SO上收到的答案:Why Doesn't Microsoft Skydrive Download Multiple Files via API?
希望这能为你的问题提供一些洞察力,而不仅仅是噪音。
https://stackoverflow.com/questions/23412928
复制相似问题