【发布时间】:2021-09-30 13:17:50
【问题描述】:
我需要创建一个从 API 端点下载文件并将其上传到另一个 API 端点的进程。该文件的最大大小为 100MB,但我们将有许多进程并行运行。我正在尝试使用 Spring WebClient 来实现它,而不是将文件存储在内存中。当前代码将文件存储在内存中,因为带有大文件的测试会抛出 OutOfMemoryError。
复制方法
public Mono<SyncStatusType> copy(Strin path1, String path2) {
return this.download(path1)
.collectList()
.flatMap(dataBuffers ->
this.upload(path2, Mono.just(dataBuffers).flatMapMany(Flux::fromIterable)))
.map(item -> SyncStatusType.SUCCESSFUL);
}
下载方法
private Flux<DataBuffer> download(String path) {
return this.getWebClient()
.get()
.uri(uriBuilder -> uriBuilder
.path(path)
.build())
.retrieve()
.bodyToFlux(DataBuffer.class);
}
上传方式
private Mono<CustomFileDto> upload(String path, Flux<DataBuffer> dataBuffer) {
return this.getWebClient()
.put()
.uri(uriBuilder -> uriBuilder
.path(path)
.build())
.contentType(MediaType.APPLICATION_JSON)
.body(BodyInserters.fromDataBuffers(dataBuffer))
.retrieve()
.bodyToMono(CustomFileDto.class)
}
如何修改此代码使其不在内存中存储文件内容?
【问题讨论】:
标签: spring-webflux spring-webclient