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.
Operaciones en objetos
Un objeto de Amazon S3 representa un archivo o un conjunto de datos. Cada objeto debe residir en un bucket.
Requisitos previos
Antes de comenzar, le recomendamos que lea Primeros pasos con el AWS SDK para C++.
Descargue el código de ejemplo y compile la solución tal y como se describe en Introducción a los ejemplos de código.
Para ejecutar los ejemplos, el perfil de usuario que su código utilice para realizar las solicitudes debe tener los permisos adecuados en AWS (para el servicio y la acción). Para obtener más información, consulte Proporcionar credenciales de AWS.
Para cargar un archivo en un bucket
Utilice la función PutObject del objeto S3Client y proporcione un nombre de bucket, un nombre de clave y el archivo que se va a cargar. Aws::FStream se utiliza para cargar el contenido del archivo local en el bucket. El bucket debe existir o se producirá un error.
Para ver un ejemplo sobre cómo cargar objetos de forma asíncrona, consulte Programación asíncrona con el AWS SDK para C++.
Código de
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(); }
Consulte el ejemplo completo en Github
Carga de una cadena en un bucket
Utilice la función PutObject del objeto S3Client y proporcione 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. Este ejemplo se diferencia del anterior porque se utiliza Aws::StringStream para cargar un objeto de datos de cadena en memoria directamente en un bucket.
Para ver un ejemplo sobre cómo cargar objetos de forma asíncrona, consulte Programación asíncrona con el AWS SDK para C++.
Código de
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(); }
Consulte el ejemplo completo en Github
List objects
Para obtener una lista de objetos dentro de un bucket, utilice la función ListObjects del objeto S3Client. Proporcione una solicitud ListObjectsRequest configurada con el nombre de un bucket para enumerar su contenido.
La función ListObjects devuelve un objeto ListObjectsOutcome que puede utilizar para obtener una lista de objetos en forma de instancias de Object.
Código de
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; }
Consulte el ejemplo completo en Github
Descargar un objeto
Utilice la función GetObject del objeto S3Client, transfiriéndole una solicitud GetObjectRequest que debe configurar con el nombre de un bucket y la clave del objeto para descargar. GetObject devuelve un objeto GetObjectOutcome que consta de un objeto GetObjectResult y un S3Error. GetObjectResult se puede usar para acceder a los datos del objeto S3.
En el siguiente ejemplo se descarga un objeto de Amazon S3. El contenido del objeto se almacena en una variable local y la primera línea del contenido se envía a la consola.
Código de
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(); }
Consulte el ejemplo completo en Github
Elimine un objeto
Utilice la función DeleteObject del objeto S3Client, transfiriéndole una solicitud DeleteObjectRequest que debe configurar con el nombre de un bucket y el objeto para descargar. El bucket y la clave de objeto especificados deben existir o se producirá un error.
Codigo
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(); }
Consulte el ejemplo completo en Github