当前位置: 首页 > 知识库问答 >
问题:

AWS -对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

杨起运
2023-03-14

我是AWS的新手,所以请耐心等待我:(

我目前正在制作一个具有上传照片功能的Web应用程序。我想将这些照片保存在S3存储桶中,并在我的数据库中保存对它们的引用。我目前正在遵循本指南:http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html

但是,我已经完成了指南中所述的一切(或者至少我希望),但是当我运行应用程序并运行createAlbum()方法时,我得到了错误:

XMLHttpRequest无法加载https://my-bucket-name.s3-us-west-2.amazonaws.com/myalbumname/.对预检请求的响应无法通过权限改造检查:请求的资源上不存在“访问控制允许源”标头。因此不允许访问源“http://localhost:3000”。

我确保Bucket权限中的所有用户都允许权限,我按照文档的指示更新了CORS配置,并更新了角色策略。

这是我在凭证方面的代码:

显然,var的值不是真正的值

var bucketRegion = '美国-西方-2 ';

var IdtyPoolId='my-Idation-pool-id';//这里也是

AWS.config.update({

区域:bucketRegion,

凭证:新的 AWS。CognitoIdentityCredentials({

标识池

})

});

var s3=新AWS。S3({apiVersion:'2006-03-01',参数:{Bucket:albumBucketName});

我一直试图找到解决办法,但没有成功。有人知道我需要做什么来解决这个问题吗?非常感谢任何帮助!谢谢你。

共有1个答案

甄华清
2023-03-14

S3铲斗上的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>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

AllowedOrigin中的*可以用于测试目的。

您的桶将需要临时凭据,您可以做的是:

 // Set the region where your identity pool exists 
    AWS.config.region = 'us-east-1';

    // Configure the credentials provider to use an identity pool for temp 
    credentials
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'IDENTITY_POOL_ID',
    });

    // Make the call to obtain credentials
    AWS.config.credentials.get(function(){

    // Credentials will be available when this function is called.
    var accessKeyId = AWS.config.credentials.accessKeyId;
    var secretAccessKey = AWS.config.credentials.secretAccessKey;
    var sessionToken = AWS.config.credentials.sessionToken;

    var bucketName = 'bucket_name';

    var keyName = "key_name";

    var params = {Bucket: bucketName, Key: keyName, Body: 'Hello World!'};

    s3.putObject(params, function (err, data) {
    if (err)
    console.log(err)
    else
    console.log("Successfully uploaded data to " + bucketName + "/" + 
    keyName);
    });
    });
 类似资料: