处理 Spring Webflux MultipartFile.transferTo 中的错误

Handle error in Spring Webflux MultipartFile.transferTo

我正在使用 spring-webflux,我想知道是否有人知道如何处理 Mono<Void> 中的错误。我正在使用 MultipartFile 的方法 transferTo,它在成功时 returns Mono.empty() 并且在其他情况下将异常包装在 Mono.error() 中。

public Mono<UploadedFile> create(final User user, final FilePart file) {
    final UploadedFile uploadedFile = new UploadedFile(file.filename(), user.getId());
    final Path path = Paths.get(fileUploadConfig.getPath(), uploadedFile.getId());

    file.transferTo(path);

    uploadedFile.setFilePath(path.toString());
    return repo.save(uploadedFile);
}

我想保存 UploadedFile 以防万一 transferTo 成功结束。但是我不能使用 map/flatMap 因为空的 Mono 显然不会发出值。 onErrorResume 只接受相同类型 (Void) 的 Mono

嗨,试着像这样链接你的运算符:

    ...
    return Mono.just(file)
        .map(f -> f.transferTo(path))
        .then(Mono.just(uploadedFile))
        .flatMap(uF -> {
            uF.setFilePath(path.toString());
            return repo.save(uF)
        });
}

如果您的 transferTo 将成功完成,它会调用 then 运算符。

P.S。如果我没记错 FilePart 正在阻塞,请尽量避免它。