Realizar operações em objetos do Amazon S3 - AWS SDK for Java 1.x

O AWS SDK for Java 1.x entrou no modo de manutenção em 31 de julho de 2024 e chegará end-of-supportem 31 de dezembro de 2025. Recomendamos que você migre para o AWS SDK for Java 2.xpara continuar recebendo novos recursos, melhorias de disponibilidade e atualizações de segurança.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Realizar operações em objetos do Amazon S3

Um objeto do Amazon S3 representa um arquivo ou um conjunto de dados. Cada objeto deve residir em um bucket.

nota

Esses exemplos de código pressupõem que você entenda o material em Usar o AWS SDK for Java e tenha configurado credenciais da AWS padrão usando as informações em Configurar credenciais e região da AWS para desenvolvimento.

Fazer upload de um objeto

Use o método putObject de cliente do AmazonS3 fornecendo um nome de bucket, um nome de chave e um arquivo para upload. O bucket deve existir ou isso resultará em um erro.

Importações

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

Código

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); }

Veja o exemplo completo no GitHub.

Listar objetos

Para obter uma lista de objetos em um bucket, use o método listObjects de cliente do AmazonS3 fornecendo o nome de um bucket.

O método listObjects retorna um objeto ObjectListing que fornece informações sobre os objetos no bucket. Para listar os nomes de objeto (chaves), use o método getObjectSummaries para obter uma lista de objetos S3ObjectSummary, cada um dos quais representa um único objeto no bucket. Depois disso, chame o método getKey para recuperar o nome do objeto.

Importações

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;

Código

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()); }

Veja o exemplo completo no GitHub.

Fazer download de um objeto

Use o método getObject de cliente do AmazonS3 passando o nome de um bucket e o objeto para fazer download. Se bem-sucedido, o método retornará um S3Object. O bucket especificado e a chave de objeto devem existir ou isso resultará em um erro.

É possível obter o conteúdo do objeto chamando getObjectContent no S3Object. Isso retorna um S3ObjectInputStream que se comporta como um objeto InputStream do Java padrão.

O exemplo a seguir faz download de um objeto do S3 e salva o conteúdo em um arquivo (usando o mesmo nome da chave do objeto).

Importações

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;

Código

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); }

Veja o exemplo completo no GitHub.

Copiar, mover ou renomear objetos

É possível copiar um objeto de um bucket para outro usando o método copyObject de cliente do AmazonS3. Ele utiliza o nome do bucket do qual será feita a cópia, o objeto a ser copiado e o nome do bucket de destino.

Importações

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

Código

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!");

Veja o exemplo completo no GitHub.

nota

Você pode usar copyObject com deleteObject para migrar ou renomear um objeto copiando primeiro o objeto para um novo nome (você pode usar o mesmo bucket na origem e no destino) e excluindo o objeto do local anterior.

Excluir um objeto

Use o método deleteObject de cliente do AmazonS3, passando o nome de um bucket e o objeto a ser excluído. O bucket especificado e a chave de objeto devem existir ou isso resultará em um erro.

Importações

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

Código

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); }

Veja o exemplo completo no GitHub.

Excluir vários objetos de uma só vez

Usando o método deleteObjects de cliente do AmazonS3, você pode excluir vários objetos do mesmo bucket passando seus nomes para o método link:sdk-for-java/v1/reference/com/amazonaws/services/s3/model/DeleteObjectsRequest.html.

Importações

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

Código

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); }

Veja o exemplo completo no GitHub.