S3:没有'Access-Control-Allow-Origin'用于AJAX POST

Dan*_*n L 16 ajax amazon-s3 cors jquery-file-upload

这个问题让我有点疯狂.我正在尝试通过AJAX POST将文件上传到S3存储桶.

我的所有凭据都是正确的,因为当我执行正常的HTTP POST时,它会在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>
Run Code Online (Sandbox Code Playgroud)

现在我只是想在我的开发环境中使用它(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.
Run Code Online (Sandbox Code Playgroud)

这对我没有任何意义,因为localhost:3000 IS通过CORS规则被授予访问权限.

我还提供了一个我用来提交表单的JS片段:

  $.ajax({
    method: "POST",
    crossDomain: true,
    url: "https://s3.amazonaws.com/<BUCKET>",
    data: $(this).serialize() # Contains S3 necessary values
  })
Run Code Online (Sandbox Code Playgroud)

表单包含必要的Amazon S3密钥/ etc的输入.我知道它们有效,因为当我执行正常的HTTP POST时,它会在S3中正确创建资产.我所要做的就是AJAXify这个过程.

我错过了一些明显的东西吗?

使用:Rails 4.1,jquery-file-upload,雾宝石(适用于S3)

小智 1

你可以尝试改变

<?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>
Run Code Online (Sandbox Code Playgroud)