akka-http表示使用分块/表单数据编码上传的文件,格式为Source[ByteString, Any]
。我需要使用需要InputStream
的Java库对其进行解组。
如何将Source[ByteString, Any]
转换为InputStream
发布于 2016-01-18 22:28:17
从2.x版开始,您可以使用以下代码来实现这一点:
import akka.stream.scaladsl.StreamConverters
...
val inputStream: InputStream = entity.dataBytes
.runWith(
StreamConverters.asInputStream(FiniteDuration(3, TimeUnit.SECONDS))
)
注意:在版本2.0.2中被破坏,并在2.4.2中修复
发布于 2015-05-28 20:35:57
您可以尝试使用写入PipedOutputStream
的OutputStreamSink
,并将其提供给其他代码用作其输入流的PipedInputStream
。这是一个有点粗糙的想法,但它可以工作。代码将如下所示:
import akka.util.ByteString
import akka.stream.scaladsl.Source
import java.io.PipedInputStream
import java.io.PipedOutputStream
import akka.stream.io.OutputStreamSink
import java.io.BufferedReader
import java.io.InputStreamReader
import akka.actor.ActorSystem
import akka.stream.ActorFlowMaterializer
object PipedStream extends App{
implicit val system = ActorSystem("flowtest")
implicit val mater = ActorFlowMaterializer()
val lines = for(i <- 1 to 100) yield ByteString(s"This is line $i\n")
val source = Source(lines)
val pipedIn = new PipedInputStream()
val pipedOut = new PipedOutputStream(pipedIn)
val flow = source.to(OutputStreamSink(() => pipedOut))
flow.run()
val reader = new BufferedReader(new InputStreamReader(pipedIn))
var line:String = reader.readLine
while(line != null){
println(s"Reader received line: $line")
line = reader.readLine
}
}
https://stackoverflow.com/questions/30502844
复制相似问题