2011-09-13 8 views
5

.net SDK를 사용하여 버킷을 만들고 Amazon S3에 파일을 업로드하려고했습니다. 버킷을 만들고 EU 지역에서 버킷을 만들도록 지정할 수 있습니다.Amazon S3의 버킷에 파일 업로드 "최대 재시도 횟수"가 실패했습니다.

파일 업로드 코드가 오류와 함께 실패
PutObjectRequest request = new PutObjectRequest(); 
request.WithBucketName(bucketName) 
    .WithCannedACL(S3CannedACL.PublicRead) 
    .WithKey(remoteFileName) 
    .WithInputStream(uploadFileStream); 

"최대 재시도 : 버킷을 생성하는 데 사용되는 코드는 내가 다음 코드를 사용하여 버킷에 파일을 업로드 진행

PutBucketRequest request = new PutBucketRequest(); 
request.WithBucketName(bucketName) 
     .WithBucketRegion(S3Region.EU); 

client.PutBucket(request); 

다음과 같다 시도가 도달했습니다. "

아무에게도 업로드 작업을 위해 내가해야 할 일을 알려주시겠습니까?

감사합니다.

EDIT : AWS 관리 콘솔을 사용하여 파일을 동일한 버킷에 업로드하려고하면 정상적으로 작동합니다.

답변

13

마침내 문제가 발견되었습니다.

특정 지역에서 버킷을 타겟팅하는 경우 Amazon S3 클라이언트 객체를 특정 끝점을 사용하도록 구성해야합니다. 아래 클래스의 각 방법에있는 클라이언트의 생성자와 창조로 엔드 포인트를 구성하는 코드는 다음과 같습니다

public class AmazonS3Service : IAmazonS3Service 
{ 
    private AmazonS3 client; 
    private string accessKeyID; 
    private string secretAccessKeyID; 
    private AmazonS3Config config; 

    public AmazonS3Service() 
    { 
     accessKeyID = ConfigurationManager.AppSettings["AWSAccessKey"]; 
     secretAccessKeyID = ConfigurationManager.AppSettings["AWSSecretKey"]; 
     config = new AmazonS3Config(); 
     config.ServiceURL = ConfigurationManager.AppSettings["AWSEUEndPoint"]; 
     } 

    public void CreateBucket(string bucketName) 
    { 
     using (client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKeyID, secretAccessKeyID, config)) 
     { 
      try 
      { 
       PutBucketRequest request = new PutBucketRequest(); 
       request.WithBucketName(bucketName) 
         .WithBucketRegion(S3Region.EU); 

       client.PutBucket(request); 
      } 
      catch (AmazonS3Exception amazonS3Exception) 
      { 
       if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) 
       { 
       //log exception - ("Please check the provided AWS Credentials."); 
       } 
       else 
       { 
       //log exception - ("An Error, number {0}, occurred when creating a bucket with the message '{1}", amazonS3Exception.ErrorCode, amazonS3Exception.Message);  
       } 
      } 
     } 
    } 

    public void UploadFile(string bucketName, Stream uploadFileStream, string remoteFileName) 
    { 
     using (client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKeyID, secretAccessKeyID, config)) 
     { 
      try 
      { 
       PutObjectRequest request = new PutObjectRequest(); 
       request.WithBucketName(bucketName) 
        .WithCannedACL(S3CannedACL.PublicRead) 
        .WithKey(remoteFileName) 
        .WithInputStream(uploadFileStream); 

       using (S3Response response = client.PutObject(request)) 
       { 
        WebHeaderCollection headers = response.Headers; 
        foreach (string key in headers.Keys) 
        { 
         //log headers ("Response Header: {0}, Value: {1}", key, headers.Get(key)); 
        } 
       } 
      } 
      catch (AmazonS3Exception amazonS3Exception) 
      { 
       if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) 
       { 
       //log exception - ("Please check the provided AWS Credentials."); 
       } 
       else 
       { 
       //log exception -("An error occurred with the message '{0}' when writing an object", amazonS3Exception.Message); 
       } 
      } 
     } 
    } 
} 

아마존의 각 서비스의 다양한 엔드 포인트

이 URL에서에서 찾을 수 있습니다 - http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html

희망이 있으면 도움이됩니다.

+0

굉장한, 분류! 덕분에 –

+0

+1 나를 도왔습니다. –

관련 문제