我有一个处理filePart的用例。为了进行处理,我使用filePart.transferTo
将其保存在本地。然后我从它创建一个通量,然后我想删除创建的本地文件。同样,我有下面的代码,但它试图删除文件,同时迭代通量,它只需要一次。我不能使用then
,因为通量不会返回。有人能告诉我做这件事的正确方法吗?
class ClassA {
FileHandlerService fileHandlerService;
Flux<ClassB> functionA(Mono<FilePart> filePartMono) {
fileHandlerService.saveFile(filePartMono)
.then(filePartMono)
.flatMap(this::getItems)
.flatMap(item ->
filePartMono.flatMap(
filePart -> fileHandlerService.deleteFile(filePart))
.then(Mono.just(item)))
}
Flux<ClassB> getItems(FilePart filePart) {
// method body
}
}
class FileHandlerService {
public Mono<Void> saveFile(Mono<FilePart> filePartMono) {
return filePartMono
.flatMap(filePart -> filePart.transferTo(Path.of(filePart.filename())));
}
public Mono<Void> deleteFile(FilePart filePart) {
return Mono.fromRunnable(() -> {
File file = new File(filePart.filename());
Files.deleteIfExists(file.toPath());
}).then()
.subscribeOn(Schedulers.boundedElastic());
}
}
1条答案
按热度按时间b1zrtrql1#
您可以在完成时删除临时文件: