Alpakka和S3截断下载的文件

v6ylcynt  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(151)

我有一段简单的代码,基于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,不幸的是没有答案。
谢谢

xsuvu9jc

xsuvu9jc1#

我已经找到了解决办法,最后很清楚......
只需要更换:data.map(_.utf8String).runWith(Sink.seq).map(_.mkString).map(Some.apply)
具有:data.map(_.utf8String).runWith(Sink.seq).map(_.mkString).map(Some.apply)
累积来自文件的所有块。
谢谢

z4iuyo4d

z4iuyo4d2#

这种方法在我的情况下花了很多时间。因为我需要积累所有的byteString,然后把它放在zip中。测试了文件大小6 MB,效果很好。
用途
(_ + _).map(字节字符串=〉{逻辑...})

相关问题