Вот как вы можете передать Source[ByteString, _]
как complete
маршрута
val route: Route = get {
val (out, source) = StreamConverters.asOutputStream().preMaterialize()
writeAsync(out)
complete(HttpEntity(ContentTypes.`application/octet-stream`, source))
}
writeAsync
может выглядеть так, но вам нужно использовать new SXSSFWorkbook(new XSSFWorkbook()).write(os)
здесь
def writeAsync(out: OutputStream): Unit = {
val random = new Random()
Future {
1 until 10000 foreach { _ =>
out.write(random.nextPrintableChar().toInt)
}
out.close()
}
}
Метод out.write
будет заблокирован до тех пор, пока не поступит запрос на Source
. Тайм-аут для блокировки настраивается с помощью asOutputStream()
метода