gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:13 25 4
gpt4 key购买 nike

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

我要使用的功能是:

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

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

CreateDownloadStreamCallback 是

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

关于c++ - 如何使用 AWS S3 C++ SDK TransferManager DownloadFile 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41124756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com