这个问题带给我一点坚果。我试图通过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请求。
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 })
该表单有必要的Amazon S3键/ etc输入。我知道他们工作,因为当我正常的HTTP POSTs它在S3中正确创建资产。所有我想要做的是AJAXify的过程。
我在这里缺少一些明显的东西吗?
使用:Rails 4.1,jquery-file-upload,fog gem(for S3)
你可以尝试改变
<?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>