Не удается загрузить файл в корзину в Amazon S3 с сообщением «Максимальное количество попыток повторной попытки достигнуто» - PullRequest
5 голосов
/ 13 сентября 2011

Я пытался создавать сегменты и загружать файлы в Amazon S3, используя их .net SDK. Я могу создать ведра и указать, что они будут созданы в регионе ЕС. Код, используемый для создания сегментов, как показано ниже

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

client.PutBucket(request);

Затем я продолжаю загружать файл в корзину, используя следующий код:

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

Код загрузки файла завершается с ошибкой «Максимальное количество попыток повторной попытки достигнуто».

Может кто-нибудь дать мне знать, что еще мне нужно сделать, чтобы загрузка работала?

Спасибо.

РЕДАКТИРОВАТЬ: Попытка загрузки файла в ту же корзину с помощью консоли управления AWS работает нормально.

1 Ответ

13 голосов
/ 14 сентября 2011

Я наконец нашел проблему.

При нацеливании на сегменты в определенном регионе клиентский объект 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);
                }
            }
        }
    }
 }

Различные конечные точки каждой из услуг Amazon можно найти по этому адресу - http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html

Надеюсь, это кому-нибудь поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...