akka-http表示使用multipart / form-data编码上传的文件Source[ByteString, Any]
。我需要使用期望InputStream
的Java库来解组它。
Source[ByteString, Any]
如何变成InputStream
?
答案 0 :(得分:22)
从版本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中修复
答案 1 :(得分:7)
您可以尝试使用写入OutputStreamSink
的{{1}}并将其提供给您的其他代码用作其输入流的PipedOutputStream
。这个想法有点粗糙,但它可以奏效。代码如下所示:
PipedInputStream
答案 2 :(得分:1)
您可以从ByteString中提取一个interator,然后获取InputStream。像这样的东西(伪代码):
source.map { data: ByteString =>
data.iterator.asInputStream
}
<强>更新强>
以Multipart.FormData
开头的更详细的示例def isSourceFromFormData(formData: Multipart.FormData): Source[InputStream, Any] =
formData.parts.map { part =>
part.entity.dataBytes
.map(_.iterator.asInputStream)
}.flatten(FlattenStrategy.concat)