2017-01-31 24 views
35

Я пытаюсь прочитать файлы, доступные на Amazon S3, так как вопрос объясняет проблему. Я не мог найти альтернативный вызов для устаревшего конструктора.AmazonS3Client (учетные данные) устарел

Вот код:

private String AccessKeyID = "xxxxxxxxxxxxxxxxxxxx"; 
private String SecretAccessKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 
private static String bucketName  = "documentcontainer"; 
private static String keyName  = "test"; 
//private static String uploadFileName = "/PATH TO FILE WHICH WANT TO UPLOAD/abc.txt"; 

AWSCredentials credentials = new BasicAWSCredentials(AccessKeyID, SecretAccessKey); 

void downloadfile() throws IOException 
{ 

    // Problem lies here - AmazonS3Client is deprecated 
    AmazonS3 s3client = new AmazonS3Client(credentials); 
     try { 
     System.out.println("Downloading an object..."); 
     S3Object s3object = s3client.getObject(new GetObjectRequest(
       bucketName, keyName)); 
     System.out.println("Content-Type: " + 
       s3object.getObjectMetadata().getContentType()); 
     InputStream input = s3object.getObjectContent(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 
     while (true) { 
      String line = reader.readLine(); 
      if (line == null) break; 

      System.out.println(" " + line); 
     } 
     System.out.println(); 
    } catch (AmazonServiceException ase) { 
      //do something 
    } catch (AmazonClientException ace) { 
     // do something 
    } 
} 

Любая помощь? если требуется больше объяснений, пожалуйста, сообщите об этом. Я проверил в примере кода, представленного в .zip-файле SDK, это то же самое.

+2

Вы должны использовать 'AwsClientBuilder' класс в качестве альтернативы. – franklinsijo

+0

@franklinsijo код или источник для чтения? –

+0

Не могли бы вы добавить его в качестве ответа? Я отредактирую ваш ответ небольшим фрагментом кода и приму его. –

ответ

76

Вы можете использовать AmazonS3ClientBuilder или AwsClientBuilder в качестве альтернативы.

Для S3, простейшим бы с AmazonS3ClientBuilder,

BasicAWSCredentials creds = new BasicAWSCredentials("access_key", "secret_key"); 
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(creds)).build(); 
+1

Была ли какая-либо причина этого устаревания, есть ли какие-либо преимущества использования AmazonS3ClientBuilder.standard() против нового AmazonS3Client (из предыдущих SDK) – rockstarjindal

+2

Оба «AmazonS3ClientBuilder» и «AwsClientBuilder» не присутствуют в последних пакетах NuGet для .Net 4.0 , но различные методы обесцениваются, включая 'StoredProfileAWSCredentials' (который я использую в настоящее время). Кто-нибудь знает рекомендуемый подход для .Net 4.0? – bikeman868

+0

Поскольку вы используете AmazonS3ClientBuilder, myClient.setRegion() больше не работает. У вас есть AmazonS3ClientBuilder.standard(). WithCredential(). WithRegion ("eu-west-1"). Build(); – user3526918

8

Используйте код, приведенный ниже, чтобы создать клиент S3 без учетных данных:

AmazonS3 s3Client = AmazonS3ClientBuilder.standard().build(); 

Пример использования будет лямбда-функция вызова S3 ,

+0

спасибо, но только работал для меня, когда я включил withRegion() –

0

Вы можете создать клиент S3 по умолчанию следующим образом (с AWS-Java-СДК-s3-1.11.232):

AmazonS3ClientBuilder.defaultClient();