Javascript AWS S3 js SDK:CORS策略已阻止从源站访问的XMLHttpRequest

Javascript AWS S3 js SDK:CORS策略已阻止从源站访问的XMLHttpRequest,javascript,amazon-web-services,amazon-s3,Javascript,Amazon Web Services,Amazon S3,我试图在我的ASP.NET Core 3 web应用程序中使用AWS js SDK来访问客户端上的s3 bucket,但它不起作用 我已经创建了一个bucket,并在其中添加了以下CORS配置: <?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedO

我试图在我的ASP.NET Core 3 web应用程序中使用AWS js SDK来访问客户端上的s3 bucket,但它不起作用

  • 我已经创建了一个bucket,并在其中添加了以下CORS配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>HEAD</AllowedMethod>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <ExposeHeader>ETag</ExposeHeader>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    </CORSConfiguration>
    
    
    *
    头
    得到
    放
    邮递
    删除
    埃塔格
    *
    
  • 我已经创建了一个新的IAM用户,该用户具有AmazonS3FullAccess权限,具有AccessKey和Secret

  • 我添加了一个简单视图,以使用以下脚本部分验证它:

    <script src="/lib/aws/aws-sdk-2.592.0.js"></script>
    <script language="javascript">
        $(function() {
    
            AWS.config.update({
                region: 'eu-west-2',
                credentials: new AWS.Credentials('<key>', '<secret>')
            });
    
            var s3 = new AWS.S3({
                apiVersion: '2006-03-01',
                params: { Bucket: '<bucket>' }
            });
    
            s3.listObjectsV2(function(err, data) {
                    if (err) console.log(err, err.stack);
                    else {
                        data.Contents.forEach(function(element) {
                            var row = "<tr>" + 
                                    "<td>" + element.Key + "</td>" + 
                                    "<td>" + element.LastModified + "</td>" + 
                                    "<td>" + element.Etag + "</td>" + 
                                    "<td>" + element.Size + "</td>" + 
                                    "<td>" + element.StorageClass + "</td>" + 
                                    "</tr>"
                            $('#objects-list-table tbody').append(row);
                        });
                    }
                });
        });
    </script>
    
    
    $(函数(){
    AWS.config.update({
    地区:“欧盟-西部-2”,
    凭据:新的AWS.credentials(“”,“”)
    });
    var s3=新的AWS.s3({
    apiVersion:‘2006-03-01’,
    参数:{Bucket:'}
    });
    s3.listObjectsV2(函数(错误、数据){
    if(err)console.log(err,err.stack);
    否则{
    data.Contents.forEach(函数(元素){
    var row=”“+
    “”+元素。键+“”+
    “”+element.LastModified+“”+
    “+element.Etag+”+
    “”+元素。大小+“”+
    “”+element.StorageClass+“”+
    ""
    $(“#对象列表表tbody”).append(行);
    });
    }
    });
    });
    
  • 我在浏览器控制台中不断遇到以下错误,比如没有为bucket配置CORS:

    Access to XMLHttpRequest at 'https://<bucket>.s3.eu-west-2.amazonaws.com/?list-type=2' from origin 'https://localhost:5001' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
    Access to XMLHttpRequest at 'https://<bucket>.s3.amazonaws.com/?max-keys=0' from origin 'https://localhost:5001' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.
    
    访问位于的XMLHttpRequest'https://.s3.eu-west-2.amazonaws.com/?list-类型=2“从原点开始”https://localhost:5001'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在'access control Allow Origin'标头。
    访问位于“”的XMLHttpRequesthttps://.s3.amazonaws.com/?max-键=0'从原点'https://localhost:5001'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:飞行前请求不允许重定向。
    

    我的配置有什么问题?如何使其工作?

    刚刚用HTTP工具包欺骗了所有HTTP请求,发现该区域不正确。 如果有人有相同的问题,并且CORS配置似乎正确,请检查该区域


    在我的例子中,法兰克福服务器不是eu-west-2,而是eu-central-1

    刚刚用HTTP工具包欺骗了所有HTTP请求,并发现该区域不正确。 如果有人有相同的问题,并且CORS配置似乎正确,请检查该区域

    在我的例子中,法兰克福服务器不是eu-west-2,而是eu-central-1