Spring Webflux 上传大图文件并使用WebClient 以流方式发送文件

Spring Webflux Upload Large Image File and Send The File with WebClient in Streaming Way

我正在使用 spring webflux 函数式风格。 我想创建一个接受大图像文件的端点,并将这些文件以流式传输的方式发送到另一个带有 webClient 的服务。

所有文件处理都应该以流方式进行,因为我不希望我的应用程序因为内存不足而崩溃。

有没有办法做到这一点?

大概是这样的:

  @PostMapping(value = "/images/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  public Mono<ResponseEntity<Void>> uploadImages(@RequestPart("files") Flux<FilePart> fileParts) {
    return fileParts
        .flatMap(filePart -> {
          return webClient.post()
              .uri("/someOtherService")
              .body(BodyInserters.fromPublisher(filePart.content(), DataBuffer.class))
              .exchange()
              .flatMap(clientResponse -> {
                //some logging
                return Mono.empty();
              });
        })
        .collectList()
        .flatMap(response -> Mono.just(ResponseEntity.accepted().build()));
  }

它接受 MULTIPART FORM DATA,您可以在其中附加多个图像文件并将它们上传到其他服务。