Ich muss einen Upstream-Dienst (Azure Blob-Dienst) aufrufen, um Daten an einen OutputStream zu senden, den ich dann umdrehen und über akka an den Client zurücksenden muss. Ohne akka (und nur Servlet-Code) würde ich nur den ServletOutputStream erhalten und ihn an die Methode des Azure-Dienstes übergeben.
Das nächste, über das ich stolpern kann, und das ist eindeutig falsch, ist so etwas
Source<ByteString, OutputStream> source = StreamConverters.asOutputStream().mapMaterializedValue(os -> {
blobClient.download(os);
return os;
});
ResponseEntity resposeEntity = HttpEntities.create(ContentTypes.APPLICATION_OCTET_STREAM, preAuthData.getFileSize(), source);
sender().tell(new RequestResult(resposeEntity, StatusCodes.OK), self());
Die Idee ist, dass ich einen Upstream-Dienst aufrufe, um einen Ausgabestream zu erhalten, der durch Aufrufen von blobClient.download (os) gefüllt wird.
Es scheint, als würde die Lambda-Funktion aufgerufen und zurückgegeben, aber danach schlägt sie fehl, weil keine Daten oder ähnliches vorhanden sind. Als ob ich nicht hätte, dass diese Lambda-Funktion die Arbeit erledigt, aber vielleicht ein Objekt zurückgibt, das die Arbeit erledigt? Nicht sicher.
Wie macht man das?
download
? Werden Daten gestreamtos
und erst zurückgegeben, wenn die Daten fertig geschrieben wurden?