File upload 上载文件的Amazon S3 CORS请求失败

File upload 上载文件的Amazon S3 CORS请求失败,file-upload,amazon-web-services,amazon-s3,cors,File Upload,Amazon Web Services,Amazon S3,Cors,我使用AmazonS3作为后端。我已经正确配置了bucket,允许CORS从我的域中访问任何内容我已经测试过它是否适用于常规文件(即通过Amazon AWS控制台或S3命令行工具上传) 我的应用程序还将JSON文件本身上传到S3存储桶。有趣的是,上传成功需要正确配置CORS。确实如此,我的JSON文件被放入了bucket中 问题是,当我对我以前上传的这些文件发出CORS GET请求(jquery$.ajax)时,请求失败,出现典型的消息 No 'Access-Control-Allow-Orig

我使用AmazonS3作为后端。我已经正确配置了bucket,允许CORS从我的域中访问任何内容我已经测试过它是否适用于常规文件(即通过Amazon AWS控制台或S3命令行工具上传)

我的应用程序还将JSON文件本身上传到S3存储桶。有趣的是,上传成功需要正确配置CORS。确实如此,我的JSON文件被放入了bucket中

问题是,当我对我以前上传的这些文件发出CORS GET请求(jquery
$.ajax
时,请求失败,出现典型的消息

No 'Access-Control-Allow-Origin' header is present on the requested resource.
请注意,如果应用程序未上载同一存储桶、同一路径中的任何其他文件,但这些文件来自控制台或comnmand line tools,则请求成功。

为什么会这样

我的CORS配置:

<?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>*</AllowedHeader>
    </CORSRule>
    <CORSRule>
        <AllowedOrigin>http://example.com</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    <CORSRule>
        <AllowedOrigin>https://example.com</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

*
收到
3000
*
http://example.com
收到
放
邮递
删去
*
https://example.com
收到
放
邮递
删去
*

在jQuery文档的某个地方,您可以找到$.ajax的选项

jQuery.support.cors = true;
...
$.ajax(
    url,
    {
        crossDomain: true,
        data: {
            sampleData
        },
        success: function() {
            alert('Yeaaahhh')
        },
        error: function(a,b,c) {
            alert('failed');
        },
        type: 'post'
    }
);
但最好使用XMLHTTPRequest。比如:

var xhr = new XMLHTTPRequest;
xhr.open('POST', url);
xhr.onreadystatechange = function(state, status){
    //do something
};

xhr.onload = function(event){
    //do something
};

xhr.onerror = function(event){
    //do something
};

xhr.send(data);

欢迎。

您是否通过localhost执行ajax请求?这是否可能是同源策略问题()?这不是因为GET请求仅对以前从应用程序上载的文件失败,如果我通过S3控制台或S3CMD上载文件,则会成功。您是否也可以发布javascript代码?