2011-09-13 11 views
5

Próbowałem tworzyć wiaderka i przesyłać pliki do Amazon S3 przy użyciu ich pakietu SDK .net. Jestem w stanie utworzyć wiaderka i określić, że zostaną utworzone w regionie UE. Kod używany do tworzenia wiadra jest poniżejZaładowanie pliku do zasobnika w usłudze Amazon S3 kończy się niepowodzeniem z "Maksymalna liczba prób ponowienia prób"

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

client.PutBucket(request); 

I następnie postępować, aby przesłać plik do wiadra za pomocą następującego kodu:

PutObjectRequest request = new PutObjectRequest(); 
request.WithBucketName(bucketName) 
    .WithCannedACL(S3CannedACL.PublicRead) 
    .WithKey(remoteFileName) 
    .WithInputStream(uploadFileStream); 

kod przesyłanie plików nie powiedzie się z powodu błędu „Maksymalna ponawiania próby dotarcia. "

Czy ktoś może dać mi znać, co jeszcze muszę zrobić, aby przesyłanie działało?

Dzięki.

EDYCJA: Próba przesłania pliku do tego samego zasobnika za pomocą konsoli zarządzania AWS działa dobrze.

Odpowiedz

13

Znalazłem problem, nareszcie.

Podczas kierowania na wiaderka w określonym regionie, obiekt klienta Amazon S3 będzie musiał być skonfigurowany do używania określonego punktu końcowego. Kod do konfigurowania punktu końcowego jak w konstruktorze i tworzenia klienta w poszczególnych metod poniższej klasy:

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

różnych punktów końcowych każdej z usług Amazon można znaleźć pod następującym adresem URL - http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html

Mam nadzieję, że to pomoże komuś!

+0

Niesamowite, posortowane! dzięki –

+0

+1 za pomoc. –

Powiązane problemy