我尝试使用AWS C ++ SDK和Aws :: Transfer :: TransferManager将文件从S3下载到内存中。
我想要使用的功能是:
std::shared_ptr< TransferHandle > DownloadFile (const Aws::String &bucketName, const Aws::String &keyName, CreateDownloadStreamCallback writeToStreamfn)
但是我不确定CreateDownloadStreamCallback参数应该如何工作。
CreateDownloadStreamCallback是
的typedefstd::function<Aws::IOStream*(void)>
我不确定应该在此回调函数中创建并返回Aws :: IOStream。
这个回调函数应该如何工作?
答案 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标志。常见的错误是将文本放入二进制流中,反之亦然。