2011-09-13 6 views
5

He estado tratando de crear cubos y cargar archivos en Amazon S3 usando su SDK .NET. Puedo crear los depósitos y especificar que se creen en la región de la UE. El código utilizado para crear los cubos es la siguientecargue un archivo en un cubo de Amazon S3 en su defecto con "El número máximo de reintentos alcanzado"

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

client.PutBucket(request); 

I A continuación, proceder a cargar un archivo en el cubo usando el siguiente código:

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

el código de carga de archivos se produce el error "reintento máximo intentos alcanzados ".

Puede alguien que me haga saber qué más tengo que estar haciendo para que la carga de trabajo?

Gracias.

EDITAR: Intentar subir un archivo al mismo cubo utilizando AWS Management Console funciona bien.

Respuesta

13

Encontré el problema, por fin.

Cuando el objetivo cubos en una región específica, el objeto de cliente de Amazon S3 tendrá que ser configurado para usar un parámetro específico. El código para configurar el punto final es como en el constructor y creación del cliente está en los métodos individuales de la clase a continuación:

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

Los diversos criterios de valoración de cada uno de los servicios de Amazon se puede encontrar en en esta dirección - http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html

Espero que esto ayude a alguien!

+0

Awesome, sorted! Gracias –

+0

+1 por ayudarme. –

Cuestiones relacionadas