Operações em objetos - AWS SDK para C++

Operações em objetos

Um objeto do Amazon S3 representa um arquivo, que é uma coleção de dados. Cada objeto deve residir em um bucket.

Pré-requisitos

Antes de começar, recomendamos que você leia Getting started using the AWS SDK para C++.

Baixe o exemplo código de código e crie a solução conforme descrito em Conceitos básicos dos exemplos de código.

Para executar os exemplos, o perfil de usuário que seu código usa para fazer as solicitações deve ter as permissões adequadas na AWS (para o serviço e a ação). Para acessar mais informações, consulte Fornecer credenciais da AWS.

Fazer upload de um arquivo para um bucket

Use a função PutObject do S3Client fornecendo um nome de bucket, um nome de chave e um arquivo para upload. Aws::FStream é usado para fazer upload do conteúdo do arquivo local para o bucket. O bucket deve existir ou isso causará um erro.

Para ver um exemplo de como fazer upload de objetos de forma assíncrona, consulte Programação assíncrona usando o AWS SDK para C++.

Código da

bool AwsDoc::S3::putObject(const Aws::String &bucketName, const Aws::String &fileName, const Aws::S3::S3ClientConfiguration &clientConfig) { Aws::S3::S3Client s3Client(clientConfig); Aws::S3::Model::PutObjectRequest request; request.SetBucket(bucketName); //We are using the name of the file as the key for the object in the bucket. //However, this is just a string and can be set according to your retrieval needs. request.SetKey(fileName); std::shared_ptr<Aws::IOStream> inputData = Aws::MakeShared<Aws::FStream>("SampleAllocationTag", fileName.c_str(), std::ios_base::in | std::ios_base::binary); if (!*inputData) { std::cerr << "Error unable to read file " << fileName << std::endl; return false; } request.SetBody(inputData); Aws::S3::Model::PutObjectOutcome outcome = s3Client.PutObject(request); if (!outcome.IsSuccess()) { std::cerr << "Error: putObject: " << outcome.GetError().GetMessage() << std::endl; } else { std::cout << "Added object '" << fileName << "' to bucket '" << bucketName << "'."; } return outcome.IsSuccess(); }

Veja o exemplo completo no GitHub.

Fazer upload de uma string para um bucket

Use a função PutObject do objeto do S3Client fornecendo um nome de bucket, um nome de chave e um arquivo para upload. O bucket deve existir ou isso causará um erro. Esse exemplo difere do anterior, pois usa Aws::StringStream para fazer upload de um objeto de dados de string na memória diretamente para um bucket.

Para ver um exemplo de como fazer upload de objetos de forma assíncrona, consulte Programação assíncrona usando o AWS SDK para C++.

Código da

bool AwsDoc::S3::putObjectBuffer(const Aws::String &bucketName, const Aws::String &objectName, const std::string &objectContent, const Aws::S3::S3ClientConfiguration &clientConfig) { Aws::S3::S3Client s3Client(clientConfig); Aws::S3::Model::PutObjectRequest request; request.SetBucket(bucketName); request.SetKey(objectName); const std::shared_ptr<Aws::IOStream> inputData = Aws::MakeShared<Aws::StringStream>(""); *inputData << objectContent.c_str(); request.SetBody(inputData); Aws::S3::Model::PutObjectOutcome outcome = s3Client.PutObject(request); if (!outcome.IsSuccess()) { std::cerr << "Error: putObjectBuffer: " << outcome.GetError().GetMessage() << std::endl; } else { std::cout << "Success: Object '" << objectName << "' with content '" << objectContent << "' uploaded to bucket '" << bucketName << "'."; } return outcome.IsSuccess(); }

Veja o exemplo completo no GitHub.

Listar objetos

Para ver uma lista de objetos em um bucket, use a função S3Client do objeto do ListObjects. Forneça uma ListObjectsRequest definida com o nome de um bucket para listar o conteúdo.

A função ListObjects exibe um objeto ListObjectsOutcome que você pode usar para ver uma lista de objetos na forma de instâncias do Object.

Código da

bool AwsDoc::S3::listObjects(const Aws::String &bucketName, Aws::Vector<Aws::String> &keysResult, const Aws::S3::S3ClientConfiguration &clientConfig) { Aws::S3::S3Client s3Client(clientConfig); Aws::S3::Model::ListObjectsV2Request request; request.WithBucket(bucketName); Aws::String continuationToken; // Used for pagination. Aws::Vector<Aws::S3::Model::Object> allObjects; do { if (!continuationToken.empty()) { request.SetContinuationToken(continuationToken); } auto outcome = s3Client.ListObjectsV2(request); if (!outcome.IsSuccess()) { std::cerr << "Error: listObjects: " << outcome.GetError().GetMessage() << std::endl; return false; } else { Aws::Vector<Aws::S3::Model::Object> objects = outcome.GetResult().GetContents(); allObjects.insert(allObjects.end(), objects.begin(), objects.end()); continuationToken = outcome.GetResult().GetNextContinuationToken(); } } while (!continuationToken.empty()); std::cout << allObjects.size() << " object(s) found:" << std::endl; for (const auto &object: allObjects) { std::cout << " " << object.GetKey() << std::endl; keysResult.push_back(object.GetKey()); } return true; }

Veja o exemplo completo no GitHub.

Fazer download de um objeto

Use a função S3Client do objeto do GetObject, transmitindo a ela uma GetObjectRequest definida com o nome de um bucket e a chave do objeto a ser baixada. GetObject exibe um objeto GetObjectOutcome que consiste em um GetObjectResult e um S3Error. GetObjectResult pode ser usado para acessar os dados do objeto do S3.

O seguinte exemplo baixa um objeto do Amazon S3: O conteúdo do objeto é armazenado em uma variável local e a primeira linha do conteúdo é enviada ao console.

Código da

bool AwsDoc::S3::getObject(const Aws::String &objectKey, const Aws::String &fromBucket, const Aws::S3::S3ClientConfiguration &clientConfig) { Aws::S3::S3Client client(clientConfig); Aws::S3::Model::GetObjectRequest request; request.SetBucket(fromBucket); request.SetKey(objectKey); Aws::S3::Model::GetObjectOutcome outcome = client.GetObject(request); if (!outcome.IsSuccess()) { const Aws::S3::S3Error &err = outcome.GetError(); std::cerr << "Error: getObject: " << err.GetExceptionName() << ": " << err.GetMessage() << std::endl; } else { std::cout << "Successfully retrieved '" << objectKey << "' from '" << fromBucket << "'." << std::endl; } return outcome.IsSuccess(); }

Veja o exemplo completo no GitHub.

Excluir um objeto

Use a função do DeleteObject do objeto do S3Client, transmitindo a ela uma DeleteObjectRequest definida com o nome de um bucket e o objeto para baixar. O bucket especificado e a chave de objeto devem existir ou isso causará um erro.

Código da

bool AwsDoc::S3::deleteObject(const Aws::String &objectKey, const Aws::String &fromBucket, const Aws::S3::S3ClientConfiguration &clientConfig) { Aws::S3::S3Client client(clientConfig); Aws::S3::Model::DeleteObjectRequest request; request.WithKey(objectKey) .WithBucket(fromBucket); Aws::S3::Model::DeleteObjectOutcome outcome = client.DeleteObject(request); if (!outcome.IsSuccess()) { auto err = outcome.GetError(); std::cerr << "Error: deleteObject: " << err.GetExceptionName() << ": " << err.GetMessage() << std::endl; } else { std::cout << "Successfully deleted the object." << std::endl; } return outcome.IsSuccess(); }

Veja o exemplo completo no GitHub.