Trabalho com S3 e armazenamentos em nuvem em Java: biblioteca AWS SDK

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com S3 e armazenamentos em nuvem em Java usando AWS SDK



Os armazenamentos de objetos em nuvem pelo protocolo S3 (Amazon Simple Storage Service) tornaram-se o padrão de facto para armazenar dados não estruturados. Em Java, para trabalhar com armazenamentos compatíveis com S3 (Amazon S3, MinIO, Yandex Object Storage, DigitalOcean Spaces, etc.), utiliza-se a biblioteca oficial AWS SDK for Java. Neste artigo, abordaremos a conexão, inicialização do cliente e as principais operações com arquivos.



Conexão do AWS SDK



Para trabalhar com S3, adicione a dependência no pom.xml (Maven):



<dependency>    <groupId>software.amazon.awssdk</groupId>    <artifactId>s3</artifactId>    <version>2.27.0</version></dependency>


Para Gradle:



implementation 'software.amazon.awssdk:s3:2.27.0'


Criação do cliente S3



O cliente é configurado através do builder. Para Amazon S3, basta especificar a região:



S3Client s3 = S3Client.builder()    .region(Region.EU_CENTRAL_1)    .build();


Para armazenamentos compatíveis (MinIO, Yandex Object Storage), é necessário especificar o endpoint e as credentials:



String endpoint = "https://storage.yandexcloud.net";String accessKey = "YOUR_ACCESS_KEY";String secretKey = "YOUR_SECRET_KEY";

S3Client s3 = S3Client.builder() .endpointOverride(URI.create(endpoint)) .region(Region.US_EAST_1) // a região pode ser qualquer uma .credentialsProvider(StaticCredentialsProvider.create( AwsBasicCredentials.create(accessKey, secretKey))) .build();


Operações principais com buckets



  • Criação de bucket
  • Verificação de existência
  • Exclusão de bucket


Exemplo de criação de bucket:



String bucketName = "my-java-bucket";try {    s3.createBucket(CreateBucketRequest.builder()        .bucket(bucketName)        .build());    System.out.println("Bucket criado: " + bucketName);} catch (S3Exception e) {    System.err.println("Erro: " + e.awsErrorDetails().errorMessage());}


Upload de arquivos (Upload)



É possível fazer upload de um arquivo a partir de um stream, string ou arquivo local:



// Upload a partir de arquivo locals3.putObject(PutObjectRequest.builder()        .bucket(bucketName)        .key("docs/report.pdf")        .build(),    RequestBody.fromFile(Paths.get("/home/user/report.pdf")));

// Upload de string como arquivo de textos3.putObject(PutObjectRequest.builder() .bucket(bucketName) .key("hello.txt") .contentType("text/plain") .build(), RequestBody.fromString("Hello, S3!"));


Download de arquivos (Download)



Para obter um objeto, use getObject:



// Download para arquivos3.getObject(GetObjectRequest.builder()        .bucket(bucketName)        .key("docs/report.pdf")        .build(),    ResponseTransformer.toFile(Paths.get("downloaded_report.pdf")));

// Download para stringString content = s3.getObjectAsBytes(GetObjectRequest.builder() .bucket(bucketName) .key("hello.txt") .build()) .asUtf8String();System.out.println(content);


Exclusão de objetos



s3.deleteObject(DeleteObjectRequest.builder()    .bucket(bucketName)    .key("hello.txt")    .build());System.out.println("Arquivo excluído");


Lista de objetos no bucket



Para obter a lista de todos os arquivos (com paginação):



ListObjectsV2Request listReq = ListObjectsV2Request.builder()    .bucket(bucketName)    .maxKeys(100)    .build();

ListObjectsV2Response listRes = s3.listObjectsV2(listReq);for (S3Object obj : listRes.contents()) { System.out.println(" - "

Recommendations