我的 scala-play api 提供端点以通过 -function 将文件作为流返回Ok.chunked
。
我现在希望能够允许以 zip 存档的形式下载多个文件。
我想创建一个 zip 文件作为流,播放应该直接作为文件流返回。这意味着无需将 zip 文件临时保存在光盘上并在创建时提供它。
实现创建此流的函数的好方法是什么?
我的 scala-play api 提供端点以通过 -function 将文件作为流返回Ok.chunked
。
我现在希望能够允许以 zip 存档的形式下载多个文件。
我想创建一个 zip 文件作为流,播放应该直接作为文件流返回。这意味着无需将 zip 文件临时保存在光盘上并在创建时提供它。
实现创建此流的函数的好方法是什么?
我通过使用 akkas alpakka 解决了这个问题。
import akka.stream.alpakka.file.ArchiveMetadata
import akka.stream.alpakka.file.scaladsl.Archive
import akka.stream.scaladsl.Source
import akka.util.ByteString
val fileSource: Source[ByteString, _] = FileIO.fromPath(path)
val tupelWithMetaData = (ArchiveMetadata(s"file.txt"), fileSource)
val stream: Source[ByteString, _] = Source(List(tupelWithMetaData)).via(Archive.zip())
首先,我创建了一个 akkaByteString
源。Tupel2
源代码在with some里面使用ArchiveMetadata
。这个元组可以用来创建一个可以连接到 alpakkas 的新源Archive.zip()
。
生成的流可以与 play 一起使用Ok.chunked
。
如果您有同样的问题,我希望这个解决方案可以帮助您。