Realizar operaciones en objetos de Amazon S3 - AWS SDK for Java 1.x

La AWS SDK for Java versión 1.x entró en modo de mantenimiento el 31 de julio de 2024 y estará disponible el 31 de end-of-supportdiciembre de 2025. Le recomendamos que migre al para AWS SDK for Java 2.xseguir recibiendo nuevas funciones, mejoras de disponibilidad y actualizaciones de seguridad.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Realizar operaciones en objetos de Amazon S3

Un objeto de Amazon S3 representa un archivo o conjunto de datos. Cada objeto debe residir en un bucket.

nota

En estos ejemplos de código se presupone que conoce la información que se describe en Uso del AWS SDK for Java y que ha configurado credenciales de AWS predeterminadas mediante la información de Configuración de credenciales y regiones de AWS para desarrollo.

Carga de un objeto

Utilice el método putObject del cliente AmazonS3, proporcionando un nombre de bucket, un nombre de clave y el archivo que se va a cargar. El bucket debe existir o se producirá un error.

Importaciones

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3;

Code

System.out.format("Uploading %s to S3 bucket %s...\n", file_path, bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { s3.putObject(bucket_name, key_name, new File(file_path)); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

Consulte el ejemplo completo en GitHub.

Lista de objetos

Para obtener una lista de objetos dentro de un bucket, utilice el método listObjects del cliente AmazonS3, proporcionando el nombre de un bucket.

El método listObjects devuelve un objeto ObjectListing que proporciona información acerca de los objetos del bucket. Para mostrar los nombres de objeto (claves), utilice el método getObjectSummaries para obtener una lista de objetos S3ObjectSummary, cada uno de los cuales representa un solo objeto del bucket. A continuación, llame a su método getKey para recuperar el nombre del objeto.

Importaciones

import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListObjectsV2Result; import com.amazonaws.services.s3.model.S3ObjectSummary;

Code

System.out.format("Objects in S3 bucket %s:\n", bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); ListObjectsV2Result result = s3.listObjectsV2(bucket_name); List<S3ObjectSummary> objects = result.getObjectSummaries(); for (S3ObjectSummary os : objects) { System.out.println("* " + os.getKey()); }

Consulte el ejemplo completo en GitHub.

Descarga de un objeto

Utilice el método getObject del cliente AmazonS3, pasando el nombre del bucket y el objeto que se van a descargar. Si se ejecuta correctamente, el método devuelve un S3Object. El bucket y la clave de objeto especificados deben existir o se producirá un error.

Puede obtener el contenido del objeto llamando a getObjectContent en el S3Object. Esto devuelve un S3ObjectInputStream que se comporta como un objeto InputStream Java estándar.

El siguiente ejemplo descarga un objeto de S3 y guarda su contenido en un archivo (con el mismo nombre que la clave del objeto).

Importaciones

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.S3Object; import com.amazonaws.services.s3.model.S3ObjectInputStream; import java.io.File;

Code

System.out.format("Downloading %s from S3 bucket %s...\n", key_name, bucket_name); final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { S3Object o = s3.getObject(bucket_name, key_name); S3ObjectInputStream s3is = o.getObjectContent(); FileOutputStream fos = new FileOutputStream(new File(key_name)); byte[] read_buf = new byte[1024]; int read_len = 0; while ((read_len = s3is.read(read_buf)) > 0) { fos.write(read_buf, 0, read_len); } s3is.close(); fos.close(); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } catch (FileNotFoundException e) { System.err.println(e.getMessage()); System.exit(1); } catch (IOException e) { System.err.println(e.getMessage()); System.exit(1); }

Consulte el ejemplo completo en GitHub.

Copiar, mover o cambiar de nombre objetos

Puede copiar un objeto de un bucket en otro mediante el método copyObject del cliente AmazonS3. Este método toma el nombre del bucket desde el que se va a realizar la copia, el objeto destino de la copia y el nombre del bucket de destino.

Importaciones

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions;

Code

try { s3.copyObject(from_bucket, object_key, to_bucket, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } System.out.println("Done!");

Consulte el ejemplo completo en GitHub.

nota

Puede utilizar copyObject con deleteObject para mover o cambiar de nombre un objeto. Para ello, primero copie el objeto en un nuevo nombre (puede utilizar el mismo bucket como origen y destino) y, a continuación, elimine el objeto de su antigua ubicación.

Eliminar un objeto

Utilice el método deleteObject del cliente AmazonS3, pasando el nombre del bucket y el objeto que se van a eliminar. El bucket y la clave de objeto especificados deben existir o se producirá un error.

Importaciones

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions;

Code

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { s3.deleteObject(bucket_name, object_key); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

Consulte el ejemplo completo en GitHub.

Eliminación de varios objetos a la vez

Con el método deleteObjects del cliente AmazonS3, puede eliminar varios objetos del mismo bucket pasando sus nombres al método link:sdk-for-java/v1/reference/com/amazonaws/services/s3/model/DeleteObjectsRequest.html.

Importaciones

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3;

Code

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { DeleteObjectsRequest dor = new DeleteObjectsRequest(bucket_name) .withKeys(object_keys); s3.deleteObjects(dor); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

Consulte el ejemplo completo en GitHub.