2013-06-09 5 views
1

Я хотел бы использовать AmazonAWS TransferManager для загрузки каталога. Я успешно создаю AmazonS3Client с учетными данными, поступающими из TVM.Области конечных точек Amazon AWS SDK Transfermanager

При попытке загрузить файлы с ней, он жалуется:

final MultipleFileDownload fileDownloadd=mTransferManager.downloadDirectory(ChanAuth.getBucketName(), remotePath, file); 

AWS Код ошибки: PermanentRedirect, AWS Сообщение об ошибке: Ковш вы пытаетесь получить доступ, должны быть решены с помощью заданного конечной точки. Пожалуйста, отправьте все будущие запросы в эту конечную точку

Я читал о предмете и пережил это в прошлом на других языках программирования. Я помню, что у него есть отношение к тому, где вы делаете окончательный «пост» при выпуске команд S3 (мне приходилось публиковать непосредственно на моем ковшоте). Но ошибка исходит из глубины SDK AWS, и ее следует обрабатывать.

Мои ведра расположены в регионе ЕС-Запад-1.

инициализирую клиенту как с

s3Client.setRegion(Regions....(Region.EU_WEST_1)) 

и

s3Client.setEndpoint("s3-eu-west-1.amazonaws.com"); 

, но я всегда получаю TransferManager жалуюсь.

Я подозреваю, что это глупая проблема, но я застрял в миллионах линий и методов AwS SDK. Должно быть где-то правильно установить конечную точку, или sdk не будет работать на ведра за пределами США.

Помощь Оценила :)

  06-09 20:16:02.810: D/SynchroService(4408): MESSAGE: nicebeat SYNC 
      06-09 20:16:02.810: D/SynchroService(4408): MESSAGE: downlading from chd68f38e7d1360dc1d999354da4f98601/nicebeat/story/sonidonia to /mnt/sdcard/Android/data/com.regaliz.libneo/files/nicebeat/story/sonidonia/lib 
      06-09 20:16:02.810: D/SynchroService(4408): is directory? true 
      06-09 20:16:03.490: W/System.err(4408): AmazonS3Exception: Status Code: 301, AWS Service: Amazon S3, AWS Request ID: 2695AE32DC39077E, AWS Error Code: PermanentRedirect, AWS Error Message: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint., S3 Extended Request ID: j9zQ8EBzkCGHkRTveri82HoA/Yh9PvJofUPtNJlc9oKrVutG0VjNEGG90WnTGaN4 
      06-09 20:16:03.490: W/System.err(4408):  at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:633) 
      06-09 20:16:03.490: W/System.err(4408):  at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:327) 
      06-09 20:16:03.490: W/System.err(4408):  at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:179) 
      06-09 20:16:03.490: W/System.err(4408):  at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:2980) 
      06-09 20:16:03.490: W/System.err(4408):  at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:2951) 
      06-09 20:16:03.490: W/System.err(4408):  at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:479) 
      06-09 20:16:03.490: W/System.err(4408):  at com.amazonaws.services.s3.transfer.TransferManager.downloadDirectory(TransferManager.java:588) 
      06-09 20:16:03.490: W/System.err(4408):  at com.regaliz.services.Synchro.downloadDirectory(Synchro.java:156) 
      06-09 20:16:03.490: W/System.err(4408):  at com.regaliz.services.Synchro.request_commands(Synchro.java:99) 
      06-09 20:16:03.490: W/System.err(4408):  at com.regaliz.services.Synchro$3.run(Synchro.java:195) 

ответ

1

Вам необходимо установить конечные точки, соответствующие с тем, где создаются ведро.

Например: если в ЕС создается «mybucket», для создаваемого вами s3client должна быть установлена ​​конечная точка как «s3-eu-west-1.amazonaws.com».

Точно так же, в зависимости от того, где было создано ваше ведро, вы можете setendpoints основываясь на этой странице: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

+0

эй! Я уже решил это, некоторые из моих ведер были неправильно перемещены в неправильный регион. Я принимаю ваш ответ в любом случае, за ответное усилие :) – rupps

0

Для пользователей из разных регионов, с различными конечными точками могут относиться следующее: http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

Если вы не знаете, что именно ваша конечная точка, вы можете пройти через все конечные точки и попробовать для каждого, и нуль на правильной конечной точке.

private String[] endPoints = new String[] { "s3.amazonaws.com", 
      "s3-external-1.amazonaws.com", "s3-us-west-2.amazonaws.com", 
      "s3-us-west-1.amazonaws.com", "s3-eu-west-1.amazonaws.com", 
      "s3-ap-southeast-1.amazonaws.com", 
      "s3-ap-southeast-2.amazonaws.com", 
      "s3-ap-northeast-1.amazonaws.com", "s3-sa-east-1.amazonaws.com" }; 

private int currentIndex = 0; 

protected S3TaskResult upload(String filePath) { 
     String endPoint = endPoints[currentIndex++]; 

     S3TaskResult result = new S3TaskResult(); 

     // Put the image data into S3. 
     try { 
      // s3Client.createBucket(Constants.getPictureBucket());" 

      s3Client.setEndpoint(endPoint); 
      // Content type is determined by file extension. 
      PutObjectRequest por = new PutObjectRequest(
        Constants.getPictureBucket(), Constants.PICTURE_NAME, 
        new java.io.File(filePath)); 
      por.setProgressListener(this); 
      s3Client.putObject(por); 

      Log.d("S3","SUCCESSFUL ENDPOINT : "+endPoint); // GOT IT!! 

     } catch (Exception exception) { 
      if (currentIndex < endPoints.length) { 
       upload(filePath); 

      } 
      exception.printStackTrace(); 
     } 

     return result; 
    } 
Смежные вопросы