2011-09-13 15 views
5

Ho cercato di creare bucket e caricare file su Amazon S3 utilizzando il loro .net SDK. Sono in grado di creare i bucket e specificare che vengano creati nella regione UE. Il codice utilizzato per creare i secchi è come sottoCaricamento di un file in un bucket in Amazon S3 in mancanza di "Numero massimo di tentativi di tentativi raggiunti"

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

client.PutBucket(request); 

ho quindi procedere a caricare un file al secchio utilizzando il seguente codice:

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

Il codice di caricamento file non riesce con l'errore "numero massimo di tentativi tentativi raggiunti. "

Qualcuno può farmi sapere cos'altro devo fare affinché il caricamento funzioni?

Grazie.

MODIFICA: Provare a caricare un file nello stesso bucket utilizzando la Console di gestione AWS funziona correttamente.

risposta

13

Ho trovato il problema, finalmente.

Durante il targeting di bucket in una regione specifica, l'oggetto client Amazon S3 dovrà essere configurato per utilizzare un endpoint specifico. Il codice per configurare l'endpoint è nel costruttore e la creazione del cliente è nei singoli metodi della classe di seguito:

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

I vari punti finali di ciascuno dei servizi di Amazon si possono trovare presso al seguente URL - http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html

Spero che questo aiuti qualcuno!

+0

Fantastico, ordinato! grazie –

+0

+1 per avermi aiutato. –

Problemi correlati