Alpakka 和 S3 截断下载的文件

Alpakka and S3 truncating downloaded files

我有一段基于 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,则文件内容是从中间到尾。我是否从文件中获取块,但为什么它们似乎没有被流式传输?

无法弄清楚发生了什么以及如何解决这个问题。我认为这个问题与另一个 question 相同,不幸的是没有答案。

谢谢

我找到了解决方案,最后很清楚...

只需更换: data.map(_.utf8String).runWith(Sink.head).map(Some.apply)

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

正在累积文件中的所有块。

谢谢