[英]Create and stream a zip file as it is beeing created with the playframework and scala
我的 scala-play api 提供端點以通過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())
首先,我創建了一個 akka ByteString
源。 源在Tupel2
內部使用, Tupel2
帶有一些ArchiveMetadata
。 這個元組可以用來創建一個可以連接到 alpakkas Archive.zip()
的新源。
結果流可以用於播放Ok.chunked
。
如果您有同樣的問題,我希望這個解決方案可以幫助您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.