2016-09-07 5 views
3

Я пытаюсь загрузить изображение на Амазонке (AWS SDK 2.3.0) s3, используя следующий кодAndroid Amazon S3 TransferUtility

 CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
      getApplicationContext(), 
      "XXXXXXX", 
      // Identity Pool ID 
      Regions.EU_WEST_1 // Region 
    ); 
    AmazonS3Client s3Client = new AmazonS3Client(credentialsProvider); 

    TransferUtility transferUtility = new TransferUtility(s3Client, this. 
      getApplicationContext()); 

    TransferObserver observer = transferUtility.upload("testbucketzzzz", "test.jpg", 
      file); 

Everytime я пытаюсь загрузить изображение я получаю следующую ошибку

UploadTask: Не удалось загрузить: 37 из-за Механизм авторизации, который вы предоставили, не поддерживается. Используйте AWS4-HMAC-SHA256. (Service: Amazon S3, код состояния: 400; Код ошибки: InvalidRequest; Request ID: 9787E53737D02BA7)

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

 System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true"); 
+0

Ну, я выяснил, что вызвало проблему, мое ведро было расположено во Франкфурте, я просто попробовал проверить его с другим ведром в Ирландии, который работал безупречно, что А теперь это исправить. – ntheg0d

ответ

1

Вы можете загрузить изображение в Amazon S3 со следующими snipet (убедитесь, что вы НЕ делать это в MainThread):

BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(
      ACCESS_KEY, 
      SECRET_KEY 
    ); 
    AmazonS3Client s3Client = new AmazonS3Client(basicAWSCredentials); 
     s3Client.setEndpoint(ENDPOINT); 
     s3Client.setRegion(Region.getRegion(Regions.EU_WEST_1));; 
    PutObjectRequest por = new PutObjectRequest(
       "YOUR_BUCKET_NAME", "YOUR_KEY", file); 
    } 
    s3Client.putObject(por); 

Если вы хотите получить больше информации о том, почему ваш подход не будут работать вы можете обратиться к this link

+0

Я думал, что рекомендуется использовать CognitoCachingCredentialsProvider, а не хардкорные учетные данные? – ntheg0d

Смежные вопросы