Webflux 上传文件不保存

Webflux upload file not saving

我有这段代码:

@PostMapping(value = {"/store"})
public Mono<ResponseEntity<StoreResponse>> store(@RequestPart("file") Mono<FilePart> file,
                                                 @RequestPart("publicationId") String publicationId,
                                                 @RequestPart("visible") String visible) throws Exception {
    return file
            .doOnNext(this::checkFile)
            .flatMap((f) -> this.saveFileToDatabase(UUID.fromString(publicationId),
                    f.filename(),
                    Boolean.parseBoolean(visible)))
            .then(Mono.just(ResponseEntity.ok().body(new StoreResponse("", "", "Working",
                    null))))
            .onErrorReturn(ResponseEntity.internalServerError().body(new StoreResponse("Not Working",
                    "", "Working", null)));
}

问题一:
奇怪的是,只要我在 Mono.
上使用 flatMap 当我切换到 map 而不是 flatMap 时,它不起作用(文件不会写入数据库 this.saveFileToDatabase(通过 spring-data-r2dbc))。
为什么会这样?

问题二:
当我想在保存到数据库后执行另一个操作(将文件保存到 minio 容器)时 - 我如何将其链接到给定的代码中?另一个 then()?

When I switch to map instead of flatMap then it does not work

map 运算符旨在执行 1 对 1 同步 操作,如简单的对象映射。另一方面, flatMap 用于异步 I/O 操作,就像您的情况一样。参见

When i want to do another operation after the saving to database

您可以像这样使用第二个 flatmap

 .flatMap(file -> this.saveFileToDatabase(...).map(reponse -> file))
 .flatMap(file -> this.saveFileToContainer(...))