Spring WebClient下载和上传文件



我需要创建一个从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多部分示例,上传/下载文件并将它们存储在Mongo GridFS中,查看我的Github上的完整代码。

测试代码演示了WebFlux客户端的交互。

最新更新