2016-12-13 2 views
2

Я пытаюсь использовать AWS C++ SDK и Aws :: Transfer :: TransferManager для загрузки файла из S3 в память.Как использовать AWS S3 C++ SDK TransferManager DownloadFile Callback

Функция Я хочу использовать это:

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

Однако я не уверен, как это предполагало CreateDownloadStreamCallback аргумент работать.

CreateDownloadStreamCallback является ЬурейиМ из

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

Я не уверен, что должно идти в эту функцию обратного вызова, чтобы создать и вернуть AWS :: IOStream.

Как должна работать эта функция обратного вызова?

ответ

1

Целью функции обратного вызова является задержка создания потока до тех пор, пока запрос не будет выполнен. Если запрос не выполняется, функция никогда не вызывается.

Это просто сделать это с помощью лямбда, так что для вашего случая вы могли бы сделать что-то вроде:

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 в потоке. Общей ошибкой является ввод текста в двоичный поток или наоборот.

Смежные вопросы