Alpakka и S3 обрезают загруженные файлы

У меня есть простой кусок кода, основанный на примерах alpakka, который должен загрузить какой-то файл с S3 для дальнейшей обработки:

S3.download(bucket, file)
  .runWith(Sink.head)
  .flatMap {
    case Some((data, _)) =>
      data.map(_.utf8String).runWith(Sink.head).map(Some.apply)
    case None =>
      Future.successful(None)
    }

Проблема в том, что содержимое файла усекается, размер файла из ObjectMetadata правильный, он имеет ~ 2M, это не огромный файл.

Что я заметил, так это то, что когда я использую Sink.head, содержимое файла идет от начала до середины, если я изменяю его на Sink.last, то это от середины до конца. Я получаю фрагменты из файла, но почему они не передаются?

Не могу понять, что происходит и как это исправить. Я считаю, что проблема такая же, как и этот другой вопрос, к сожалению без ответов.

Спасибо


person bolo    schedule 18.03.2020    source источник


Ответы (1)


Я нашел решение, в конце концов, это было очень ясно...

Просто нужно заменить: data.map(_.utf8String).runWith(Sink.head).map(Some.apply)

с: data.map(_.utf8String).runWith(Sink.seq).map(_.mkString).map(Some.apply)

накапливая все фрагменты из файла.

Спасибо

person bolo    schedule 18.03.2020
comment
Вы можете взглянуть на Benji S3 (я являюсь участником) - person cchantep; 18.03.2020