Переслать поток загрузки файлов на S3 через Iteratee с Play2 / Scala

Мы читали некоторые материалы о возможности отправки файла в S3 через Iteratee, что, похоже, позволяет отправлять таким образом фрагменты файла S3 по мере их получения и избегать использования OutOfMemory для больших файлов, например.

мы нашли этот ТАК пост, который, вероятно, почти то, что мне нужно сделать:Play 2.x: загрузка файлов с помощью Iteratees Я нене понимаю, как это сделать, или если этодействительно доступны в Play 2.0.2 (потому что Садек Броди говорит, что foldM доступен в Play 2.1 только для примера)

Может ли кто-то объяснить это простым способом, для кого-то, кто читал какой-то блог об Итератах, и еще не является экспертом по Scala / Play2?

Я недаже не знаю, стоит ли мне использовать многочастный анализатор тела или что-то в этом роде, но я знаю одно, что я нене понимаю, что делает этот код:

val consumeAMB = 
  Traversable.takeUpTo[Array[Byte]](1028*1028) &>> Iteratee.consume()

val rechunkAdapter:Enumeratee[Array[Byte],Array[Byte]] =
  Enumeratee.grouped(consumeAMB)

val writeToStore: Iteratee[Array[Byte],_] =
  Iteratee.foldM[Array[Byte],_](connectionHandle){ (c,bytes) => 
    // write bytes and return next handle, probable in a Future
  }

BodyParser( rh => (rechunkAdapter &>> writeToStore).map(Right(_)))

Кстати, какая будет разница в потреблении памяти по сравнению с использованием классического Java InputStream / OutputStream. На самом деле я могу пересылать 500-мегабайтный файл на S3 неблокирующим способом, с очень низким потреблением памяти, без использования Iteratees, с использованием Java + AsyncHttpClient + Grizzly (но я думаю, это также будет работать с Netty).

И что'Преимущество использования Iteratee?

Одно отличие, которое я вижу, состоит в том, что InputStream, который я получаю и пересылаю в S3, в моем случае поддерживается временным файлом (это поведение CXF), поэтому он может быть не таким реактивным, как Play Iteratee.

Но в случае с итераторами, если перечислитель создает байты, полученные соединением, и пересылает их на S3 через итератора, тогда, если соединение с S3 не является хорошим и байты могут 'Быстро пересылать, где хранятся "в ожидании» байт?

Ответы на вопрос(1)

Ваш ответ на вопрос