我对AWS真的很新,所以请耐心等待:(
我目前正在制作一个具有上传照片功能的网络应用程序。我想将这些照片保存在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 albumBucketName =' my-bucket-name&#39 ;; //不是真正的价值,显然是
var bucketRegion =' us-west-2';
var IdentityPoolId =' my-identity-pool-id&#39 ;; //这里也是
AWS.config.update({
region:bucketRegion,
凭据:新的AWS.CognitoIdentityCredentials({
IdentityPoolId:IdentityPoolId
})
});
var s3 = new AWS.S3({ apiVersion:' 2006-03-01', params:{Bucket:albumBucketName} });
我一直试图找到一个没有成功的解决方案。有谁知道我需要做些什么来解决这个问题?任何帮助是极大的赞赏! 谢谢。
答案 0 :(得分:1)
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);
});
});