我正在尝试使用Spring WebFlux WebClient检索大型二进制文件。我返回了Mono<DataBuffer>
并尝试将POST
传送到服务器。
Mono<DataBuffer> data = ...
MultipartBodyBuilder bodyBuilder = new MultipartBodyBuilder();
bodyBuilder.asyncPart("file", data, DataBuffer.class);
response = webClient.post()
.uri(...)
// .body(BodyInserters.fromMultipartData(data))
// .body(data, DataBuffer.class)
// .body(BodyInserters.fromDataBuffers(data))
.bodyValue(bodyBuilder.build())
.headers(
httpHeaders -> httpHeaders.addAll(headers)
).exchange()
.flatMap(
clientResponse -> {
...
}
)
.block();
从我观察到的结果来看,响应是在将其POST发送到服务器之前已完全获取的(有时我观察到408 s;通过WireShark查看这些数据包似乎没有交织)。有没有办法使它以内存效率更高的方式工作,并在完全获取响应之前开始发送请求?
PS。不确定是否相关,但是不幸的是,该应用程序是同时具有Spring MVC和WebFlux(具有Spring自动配置前者)的Spring mishmash
编辑:根据代码注释,reactor.netty.http.client.HttpClient
默认情况下应使用分块编码,因此我想知道我在做什么错