我有一段简单的代码,基于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
的文件大小是正确的,它有~ 2 M,它不是一个巨大的文件。
我注意到,当我使用Sink.head
时,文件内容是从开头到中间的,如果我将其更改为Sink.last
,则是从中间到结尾的。我是否从文件中获得了块,但为什么它们似乎没有被流式传输?
不知道发生了什么,如何解决这个问题。我相信这个问题是相同的,这另一个question,不幸的是没有答案。
谢谢
2条答案
按热度按时间xsuvu9jc1#
我已经找到了解决办法,最后很清楚......
只需要更换:
data.map(_.utf8String).runWith(Sink.seq).map(_.mkString).map(Some.apply)
具有:
data.map(_.utf8String).runWith(Sink.seq).map(_.mkString).map(Some.apply)
累积来自文件的所有块。
谢谢
z4iuyo4d2#
这种方法在我的情况下花了很多时间。因为我需要积累所有的byteString,然后把它放在zip中。测试了文件大小6 MB,效果很好。
用途
(_ + _).map(字节字符串=〉{逻辑...})