我需要调用上游服务(Azure Blob服务)以将数据推送到OutputStream,然后需要通过akka转过来并将其推送回客户端。没有akka(只有servlet代码),我只需要获取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)获得填充的输出流;
似乎lambda函数被调用并返回,但是随后它失败了,因为没有数据或其他东西。好像我不应该让那个lambda函数来完成这项工作,但是也许返回一些可以完成这项工作的对象?不确定。
如何做到这一点?
download
什么?它是否将数据流式传输os
并仅在完成数据写入后才返回?