Мне нужно вызвать вышестоящую службу (службу BLOB-объектов Azure), чтобы отправить данные в OutputStream, который затем мне нужно развернуть и отправить обратно клиенту через akka. Без akka (и просто кода сервлета) я просто получил бы ServletOutputStream и передал его методу службы Azure.
Самое близкое, на что я могу попытаться наткнуться, и, очевидно, это неправильно, это что-то вроде этого
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());
Идея в том, что я вызываю вышестоящий сервис для получения выходного потока, вызывая blobClient.download (os);
Кажется, что лямбда-функция вызывается и возвращается, но затем она перестает работать, потому что нет данных или чего-то еще. Как будто я не должен иметь эту лямбда-функцию, но возможно вернуть какой-то объект, который работает? Точно сказать не могу.
Как это сделать?
download
? Потоковые данные передаютсяos
и возвращаются только после записи данных?