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 gestreamtosund erst zurückgegeben, wenn die Daten fertig geschrieben wurden?