Spring WebClient:如何将大byte []流式传输到文件?

看起来Spring RestTemplate不能将响应直接流式传输到文件而不将其全部缓存在内存中。使用较新的Spring

5实现此目标的合适方法是WebClient什么?

WebClient client = WebClient.create("https://example.com");

client.get().uri(".../{name}", name).accept(MediaType.APPLICATION_OCTET_STREAM)

....?

我看到人们已经找到了解决此问题的一些变通方法/技巧RestTemplate,但是我对使用正确的方法更感兴趣WebClient

有许多RestTemplate用于下载二进制数据的示例,但几乎所有示例都将其加载byte[]到内存中。

回答:

使用最近稳定的Spring WebFlux(截至撰写时为5.2.4.RELEASE):

final WebClient client = WebClient.create("https://example.com");

final Flux<DataBuffer> dataBufferFlux = client.get()

.accept(MediaType.TEXT_HTML)

.retrieve()

.bodyToFlux(DataBuffer.class); // the magic happens here

final Path path = FileSystems.getDefault().getPath("target/example.html");

DataBufferUtils

.write(dataBufferFlux, path, CREATE_NEW)

.block(); // only block here if the rest of your code is synchronous

对我来说,最不明显的部分是bodyToFlux(DataBuffer.class),正如有关

Spring文档流的通用部分中当前提到的,在WebClient部分中没有直接引用它。

以上是 Spring WebClient:如何将大byte []流式传输到文件? 的全部内容, 来源链接: utcz.com/qa/403206.html

回到顶部