Trabajo con S3 y almacenamiento en la nube en Java: biblioteca AWS SDK

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con S3 y almacenamiento en la nube en Java con AWS SDK



Los almacenes de objetos en la nube mediante el protocolo S3 (Amazon Simple Storage Service) se han convertido en el estándar de facto para almacenar datos no estructurados. En Java, para trabajar con almacenes compatibles con S3 (Amazon S3, MinIO, Yandex Object Storage, DigitalOcean Spaces, etc.) se utiliza la biblioteca oficial AWS SDK for Java. En este artículo analizaremos la conexión, inicialización del cliente y las operaciones principales con archivos.



Conexión de AWS SDK



Para trabajar con S3, agregue la dependencia en 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'


Creación del cliente S3



El cliente se configura mediante el builder. Para Amazon S3, basta con especificar la región:



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


Para almacenes compatibles (MinIO, Yandex Object Storage) es necesario especificar el endpoint y las credenciales:



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) // la región puede ser cualquiera .credentialsProvider(StaticCredentialsProvider.create( AwsBasicCredentials.create(accessKey, secretKey))) .build();


Operaciones principales con buckets



  • Creación de bucket
  • Verificación de existencia
  • Eliminación de bucket


Ejemplo de creación de bucket:



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


Carga de archivos (Upload)



Se puede cargar un archivo desde un flujo, una cadena o un archivo local:



// Carga desde archivo locals3.putObject(PutObjectRequest.builder()        .bucket(bucketName)        .key("docs/report.pdf")        .build(),    RequestBody.fromFile(Paths.get("/home/user/report.pdf")));

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


Descarga de archivos (Download)



Para obtener un objeto, use getObject:



// Descarga a archivos3.getObject(GetObjectRequest.builder()        .bucket(bucketName)        .key("docs/report.pdf")        .build(),    ResponseTransformer.toFile(Paths.get("downloaded_report.pdf")));

// Descarga a cadenaString content = s3.getObjectAsBytes(GetObjectRequest.builder() .bucket(bucketName) .key("hello.txt") .build()) .asUtf8String();System.out.println(content);


Eliminación de objetos



s3.deleteObject(DeleteObjectRequest.builder()    .bucket(bucketName)    .key("hello.txt")    .build());System.out.println("Archivo eliminado");


Lista de objetos en el bucket



Para obtener la lista de todos los archivos (con paginación):



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

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

Recommendations