我已经尝试了几天从aws-sdk获取javascript的上传文件到s3存储桶。我添加了正确的CORS策略,并且出于测试目的,存储桶具有公共权限。文件上传仅在50%的情况下有效。
我正在尝试从我的网站上连续上传3-4个文件,但是在第二个之后我被拒绝访问。由于某种原因,前2个上传成功但第3个以后失败。我不知道我是否发现了一个小故障,或者我是否做错了什么。
我的CORs政策是。我也试过
call
我也尝试过:
`<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://*</AllowedOrigin>
<AllowedOrigin>https://*</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<ExposeHeader>ETag</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>`
没有成功。
要上传文件,我使用aws-cognito sdk中的临时凭证作为js。我用来上传文件的代码如下:
<AllowedOrigin>*</AllowedOrigin>
如果重要的话,我上传的网站是在ec2实例上托管的。
我知道有很多关于如何让文件上传与S3一起工作的帖子,但我从未见过任何只在一部分时间内工作的地方。我假设我使用的凭据和我的CORS配置是正确的,否则上传将无法正常工作?
提前感谢您的帮助!
编辑:
此错误仅发生在第3次连续上传及以后。我上传的第一个和第二个文件没有错误并且成功。
我收到的错误代码如下:
放入[S3Instance] 403 Forbidden
function uploadFile(fileData,callback){
var file = fileData[4];
var key = "";
for(i=0; i<3; i++){
var temp = Math.ceil(Math.random()*1000000000000)
key=key+temp;
}
AWS.config.sessionToken= mySessionToken;
AWS.config.accessKeyId= myAccessKey;
AWS.config.secretAccessKey= mySecretKey;
AWS.config.region= myRegion;
var bucket = new AWS.S3({params: {Bucket: myBucketName}});
var params = {Key: key, ContentType: file.type, Body: file, ACL:'bucket-owner-
full-control'};
bucket.upload(params, function (err, data) {
if (err) {
callback(false,err,fileData);
}
else{
callback(true,"",fileData);
}
});
}
答案 0 :(得分:1)
我遇到了同样的问题,我将两个策略:AWSLambdaExecute和AWSLambdaBasicExecutionRole附加到与我的lambda相关联的IAM角色上,从而解决了该问题。
答案 1 :(得分:0)
启用CloudTrail日志记录并查看日志以确定原因。