2016-12-13 87 views
2

我試圖使用AWS C++ SDK和Aws :: Transfer :: TransferManager從S3下載文件到內存中。如何使用AWS S3 C++ SDK TransferManager DownloadFile回調

我想使用的功能是:

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

但是我不知道該CreateDownloadStreamCallback說法是如何工作的。

CreateDownloadStreamCallback是

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

一個typedef我不知道應該怎樣進入這個回調函數創建並返回一個AWS :: iostream的。

這個回調函數應該如何工作?

回答

1

回調函數的意圖是延遲流創建,直到請求成功爲止。如果請求失敗,則函數永遠不會被調用。

這是簡單的通過一個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標誌。一個常見的錯誤是將文本放入二進制流中,反之亦然。

相關問題