Spring boot Spring Webflux上传大型图像文件,并通过WebClient以流式方式发送该文件

Spring boot Spring Webflux上传大型图像文件,并通过WebClient以流式方式发送该文件,spring-boot,file-upload,streaming,spring-webflux,Spring Boot,File Upload,Streaming,Spring Webflux,我使用的是SpringWebFlux函数式。 我想创建一个接受大型图像文件的端点,并以流式方式将这些文件发送到另一个具有webClient的服务 所有的文件处理都应该以流的方式进行,因为我不想因为outofmemory而使我的应用程序崩溃 还有什么办法吗?可能是这样的: @PostMapping(value = "/images/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public Mono&l

我使用的是SpringWebFlux函数式。 我想创建一个接受大型图像文件的端点,并以流式方式将这些文件发送到另一个具有webClient的服务

所有的文件处理都应该以流的方式进行,因为我不想因为outofmemory而使我的应用程序崩溃


还有什么办法吗?

可能是这样的:

  @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()));
  }
@PostMapping(value=“/images/upload”,consumes=MediaType.MULTIPART\u FORM\u DATA\u value)
公共单声道上传图像(@RequestPart(“文件”)Flux fileParts){
返回文件部件
.flatMap(文件部分->{
返回webClient.post()
.uri(“/someOtherService”)
.body(BodyInserters.fromPublisher(filePart.content(),DataBuffer.class))
.exchange()
.flatMap(客户端响应->{
//一些伐木
返回Mono.empty();
});
})
.LIST()
.flatMap(response->Mono.just(ResponseEntity.accepted().build());
}

它接受多部分表单数据,您可以在其中附加多个图像文件并将其上载到另一个服务。

可能类似于:

  @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()));
  }
@PostMapping(value=“/images/upload”,consumes=MediaType.MULTIPART\u FORM\u DATA\u value)
公共单声道上传图像(@RequestPart(“文件”)Flux fileParts){
返回文件部件
.flatMap(文件部分->{
返回webClient.post()
.uri(“/someOtherService”)
.body(BodyInserters.fromPublisher(filePart.content(),DataBuffer.class))
.exchange()
.flatMap(客户端响应->{
//一些伐木
返回Mono.empty();
});
})
.LIST()
.flatMap(response->Mono.just(ResponseEntity.accepted().build());
}
这接受多部分表单数据,您可以在其中附加多个图像文件并将其上载到另一个服务