如何使用AWS S3 C SDK TransferManager downloadfile回调

How to Use AWS S3 C++ SDK TransferManager DownloadFile Callback

本文关键字:TransferManager downloadfile 回调 SDK 何使用 AWS S3      更新时间:2023-10-16

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

我要使用的功能是:

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

但是,我不确定应该如何工作的createWonnloadStreamCallback参数。

createNtloadStreamCallback是

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

我不确定该回调函数应该如何创建和返回AWS :: iostream。

此回调函数应该如何工作?

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

通过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标志。一个常见的错误是将文本放入二进制流中,反之亦然。