Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
S3:否';访问控制允许原点';对于AJAX POST_Ajax_Amazon S3_Cors_Jquery File Upload - Fatal编程技术网

S3:否';访问控制允许原点';对于AJAX POST

S3:否';访问控制允许原点';对于AJAX POST,ajax,amazon-s3,cors,jquery-file-upload,Ajax,Amazon S3,Cors,Jquery File Upload,这个问题让我有点发疯。我正试图通过AJAX POST将文件上传到S3存储桶中 我所有的凭证都是正确的,因为当我进行正常的HTTP发布时,它会在S3 bucket中创建资源。但是我真的很想用进度条一次上传多个文件,因此我需要AJAX 我在S3存储桶上设置了CORS: <?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">

这个问题让我有点发疯。我正试图通过AJAX POST将文件上传到S3存储桶中

我所有的凭证都是正确的,因为当我进行正常的HTTP发布时,它会在S3 bucket中创建资源。但是我真的很想用进度条一次上传多个文件,因此我需要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>

http://localhost:3000
得到
邮递
*
现在我只是想让它在我的开发环境中工作(localhost:3000,使用标准Rails 4.1)

根据我的理解,上述CORS规则应该允许从localhost:3000到S3 bucket的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.
XMLHttpRequest无法加载https://s3.amazonaws.com/. 请求的资源上不存在“Access Control Allow Origin”标头。起源'http://localhost:3000因此,不允许访问。
这对我来说没有任何意义,因为localhost:3000通过CORS规则被授予访问权限

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

  $.ajax({
    method: "POST",
    crossDomain: true,
    url: "https://s3.amazonaws.com/<BUCKET>",
    data: $(this).serialize() # Contains S3 necessary values
  })
$.ajax({
方法:“张贴”,
跨域:是的,
url:“https://s3.amazonaws.com/",
数据:$(this).serialize()包含S3必需的值
})
表单中有必要的Amazon S3键/etc输入。我知道它们可以工作,因为当我进行正常的HTTP发布时,它会在S3中正确地创建资产。我所要做的就是把这个过程简化

我是不是漏掉了什么明显的东西


使用:Rails 4.1、jquery文件上传、fog gem(用于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>

*
得到
3000
授权

您的问题似乎与我遇到的一个问题非常相似,这个问题也没有得到正确(准确)的回答,似乎是一个与浏览器限制有关的问题,而不是它背后的实际传输技术

这是我最初的问题和我在这里收到的答案的链接,所以:


希望这能让您了解您的问题,而不仅仅是噪音。

您是否验证了
POST
发送的是
Origin
标题?似乎有些浏览器可能不会,因为它们将
localhost
视为不同的安全级别。我已经检查过了。我正在使用Chome的开发工具,它说它正在提交一个
源代码:http://localhost:3000
在请求中。它确实有一个注释,上面写着
注意:显示临时标题
。我还没有查到这个问题,但我想我也需要排除这个问题。你找到解决办法了吗?@klchoi:我已经一年没有接触到这个问题了,但我相信亚马逊推出了一些更新,通过允许直接发布到他们的桶中解决了我的问题。我不再参与那个项目了,所以我无法核实。很抱歉,我无法提供更多的见解。