[Java DSL]我正在尝试使用客户端api实时向服务器(作为正文)发布字节流,但不会知道请求开始之前的长度。
我无法弄清楚如何从akka-http文档中做到这一点,是否有人尝试过此操作?
答案 0 :(得分:0)
鉴于此,您已从Akka上下文创建了materializer
,并且Source
生成了ByteString
个名为mysource
的对象:
Http httpContext =
Http.get(context().system());
Source<ByteString, NotUsed> chunked =
mysource.map(str -> ByteString(str.concat("\n")))
.concat(Source.single(ByteString.empty()));
HttpRequest post = HttpRequest.POST("http://some-server/address")
.withEntity(HttpEntities.createChunked(ContentTypes.APPLICATION_OCTET_STREAM, chunked))
.withProtocol(HttpProtoclas.HTTP_1_1);
CompletionStage<HttpResponse> result =
httpContext.singleRequest(post, materializer);
请注意,我们将空ByteString
源对象连接到原始Source
,以便发出分块流的结束信号。
如果您是从演员中发出此内容,最好使用pipe()
提交最终请求。