我是Akka Streams和Akka HTTP的新手。
我想生成一个简单的HTTP服务器,该服务器可以从文件夹的内容生成一个zip文件并将其发送给客户端。
org.zeroturnaround.zip.ZipUtil使创建zip文件的任务非常容易,但是它需要一个outputStream
。
这是我的解决方案(用Scala语言编写):
val os = new ByteArrayOutputStream()
ZipUtil.pack(myFolder, os)
HttpResponse(entity = HttpEntity(
MediaTypes.`application/zip`,
os.toByteArray))
此解决方案有效,但是将所有内容保留在内存中,因此无法扩展。
我认为解决此问题的关键是使用此方法:
val source = StreamConverters.asOutputStream()
但不知道如何使用。 :-(
有什么帮助吗?
最佳答案
试试这个
val byteSource: Source[ByteString, Unit] = StreamConverters.asOutputStream()
.mapMaterializedValue(os => ZipUtil.pack(myFolder, os))
HttpResponse(entity = HttpEntity(
MediaTypes.`application/zip`,
byteSource))
一旦实现了源,就只能访问OutputStream,
这可能不会立即发生。从理论上讲,源也可以实现多次,因此您应该能够处理此问题。
关于scala - 如何使用Akka HTTP通过输出流生成内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41126059/