如何使用 AWS S3 C++ SDK TransferManager 下载文件回调

Ale*_*lau 7 c++ amazon-s3 amazon-web-services aws-sdk

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

我想使用的功能是:

std::shared_ptr< TransferHandle > DownloadFile (const Aws::String &bucketName, const Aws::String &keyName, CreateDownloadStreamCallback writeToStreamfn)
Run Code Online (Sandbox Code Playgroud)

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

CreateDownloadStreamCallback 是一个 typedef

std::function<Aws::IOStream*(void)> 
Run Code Online (Sandbox Code Playgroud)

我不确定应该在这个回调函数中添加什么来创建和返回 Aws::IOStream。

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

Bre*_*ose 5

回调函数的目的是将流创建延迟到请求成功之后。如果请求失败,则永远不会调用该函数。

通过 lambda 执行此操作很简单,因此对于您的情况,您可能会执行以下操作:

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

如果你想下载到一个文件,你可以将创建函数切换为:

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

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