2

我一直在嘗試幾天來從aws-sdk獲取JavaScript上傳文件到s3存儲桶。我已經添加了正確的CORS策略,並且爲了測試目的,存儲桶具有公共權限。文件上傳只能在50%的時間內完成。AWS S3訪問被拒絕僅有時

我想從我的網站立即連續上傳3-4個文件,但我在第二個之後拒絕訪問。出於某種原因,前2個成功上傳,但第3個起始失敗。我不知道我是否發現了一個小故障,或者如果有什麼我做錯了。

我CORs的政策是。我也曾嘗試

`<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>` 

我也曾嘗試:

<AllowedOrigin>*</AllowedOrigin> 

要沒有成功。

要上傳文件,我使用來自aws-cognito sdk for js的臨時證書。我用來上傳文件的代碼如下:

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); 
} 
}); 

} 

如果重要的是我上傳的網站託管在ec2實例上。

我知道有很多關於如何讓文件上傳與S3一起工作的帖子,但我從來沒有看到過它只在一段時間內工作的地方。我假設我使用的證書和我的CORS配置是正確的,否則上傳不會正常工作?

在此先感謝您的幫助!

編輯:

此錯誤只發生在3日連續上傳和開始。我上傳的第一個和第二個文件沒有錯誤並且成功。

我收到錯誤代碼如下:

將[S3Instance] 403禁止

<Error> 
<Code> 
AccessDenied 
</Code> 
<Message> 
Access Denied 
</Message> 
<RequestId> 
RequestId 
</RequestId> 
<HostId> 
HostId 
</HostId> 
</Error> 
+0

當您說失敗時,您能否請您記下您從SDK獲取的錯誤消息並將其添加到問題中? –

+0

@ShobhitPuri感謝您的回覆。我添加了收到的錯誤代碼。 – JohnSmith

+0

有時候由於系統時鐘問題,我看到了AWS SDK的錯誤。也許嘗試重置它。 –

回答

0

啓用CloudTrail記錄和看一看日誌以確定原因。