如何使用AWS S3 C ++ SDK TransferManager DownloadFile回调

时间:2016-12-13 15:27:36

标签: c++ amazon-web-services amazon-s3 aws-sdk

我尝试使用AWS C ++ SDK和Aws :: Transfer :: TransferManager将文件从S3下载到内存中。

我想要使用的功能是:

std::shared_ptr< TransferHandle > DownloadFile (const Aws::String &bucketName, const Aws::String &keyName, CreateDownloadStreamCallback writeToStreamfn)

但是我不确定CreateDownloadStreamCallback参数应该如何工作。

CreateDownloadStreamCallback是

的typedef
std::function<Aws::IOStream*(void)> 

我不确定应该在此回调函数中创建并返回Aws :: IOStream。

这个回调函数应该如何工作?

1 个答案:

答案 0 :(得分:2)

回调函数的目的是延迟流创建,直到请求成功。如果请求失败,那么函数永远不会被调用。

通过lambda直接做到这一点,所以对于你的情况,你可能会做类似的事情:

auto creationFunction = [](){ return Aws::New< Aws::StringStream >( "DownloadTag" ); };
auto transferHandle = transferClient.DownloadFile("MyBucket", "MyKey", creationFunction);

如果您想下载到某个文件,请将创建功能切换为:

auto creationFunction = [](){ return Aws::New< Aws::OFStream >( "DownloadTag", "MyFile.txt", std::ofstream::out ); };

在成功请求时,将调用创建函数,并将请求正文流式传输到创建的内容中。您需要小心流上的ios标志。常见的错误是将文本放入二进制流中,反之亦然。