客户端POST到服务器的长度不确定

时间:2016-10-20 18:30:38

标签: akka-http

[Java DSL]我正在尝试使用客户端api实时向服务器(作为正文)发布字节流,但不会知道请求开始之前的长度。

我无法弄清楚如何从akka-http文档中做到这一点,是否有人尝试过此操作?

1 个答案:

答案 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()提交最终请求。