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(...))
我有这段代码:
@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(...))