Muszę zadzwonić do usługi nadrzędnej (Azure Blob Service), aby przekazać dane do OutputStream, który następnie muszę zawrócić i odesłać z powrotem do klienta, poprzez akka. Bez akka (i tylko kodu serwletu) po prostu wziąłbym ServletOutputStream i przekazałem go do metody usługi lazurowej.
Najbliższe, na jakie mogę się natknąć, i oczywiście jest to złe, to coś takiego
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());
Chodzi o to, że dzwonię do usługi nadrzędnej, aby zapełnić strumień wyjściowy, wywołując funkcję blobClient.download (os);
Wygląda na to, że funkcja lambda zostaje wywołana i powraca, ale potem kończy się niepowodzeniem, ponieważ nie ma żadnych danych ani czegoś takiego. Jakbym nie miał mieć tej funkcji lambda, ale może zwróci jakiś obiekt, który wykonuje tę pracę? Niepewny.
Jak to zrobić?
download
? Czy przesyła strumieniowo daneos
i zwraca je dopiero po zakończeniu zapisywania danych?