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。
这个回调函数应该如何工作?
回调函数的目的是将流创建延迟到请求成功之后。如果请求失败,则永远不会调用该函数。
通过 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 标志。一个常见的错误是将文本放入二进制流中,反之亦然。
| 归档时间: |
|
| 查看次数: |
1403 次 |
| 最近记录: |