Control de los iostreams utilizados por el HttpClient y el AWSClient en el AWS SDK para C++
De forma predeterminada, todas las respuestas utilizan un flujo de entrada respaldado por una función stringbuf. Si es necesario, puede anular el comportamiento predeterminado. Por ejemplo, si utiliza un GetObject de Amazon S3 y no quiere cargar todo el archivo en la memoria, puede utilizar IOStreamFactory en AmazonWebServiceRequest para pasar una función lambda para crear un flujo de archivos.
Ejemplo de solicitud de flujo de archivos
//! Use a custom response stream when downloading an object from an Amazon Simple //! Storage Service (Amazon S3) bucket. /*! \param bucketName: The Amazon S3 bucket name. \param objectKey: The object key. \param filePath: File path for custom response stream. \param clientConfiguration: AWS client configuration. \return bool: Function succeeded. */ bool AwsDoc::SdkCustomization::customResponseStream(const Aws::String &bucketName, const Aws::String &objectKey, const Aws::String &filePath, const Aws::Client::ClientConfiguration &clientConfiguration) { Aws::S3::S3Client s3_client(clientConfiguration); Aws::S3::Model::GetObjectRequest getObjectRequest; getObjectRequest.WithBucket(bucketName).WithKey(objectKey); getObjectRequest.SetResponseStreamFactory([filePath]() { return Aws::New<Aws::FStream>( "FStreamAllocationTag", filePath, std::ios_base::out); }); Aws::S3::Model::GetObjectOutcome getObjectOutcome = s3_client.GetObject( getObjectRequest); if (getObjectOutcome.IsSuccess()) { std::cout << "Successfully retrieved object to file " << filePath << std::endl; } else { std::cerr << "Error getting object. " << getObjectOutcome.GetError().GetMessage() << std::endl; } return getObjectOutcome.IsSuccess(); }
nota
Hay más en GitHub. Busque el ejemplo completo en el Repositorio de ejemplos de código de AWS