Spring WebFlux文件上传:如何返回已上传的文件名
修改多文件上传接口以返回已上传文件名
当前接口仅完成文件保存与文件名打印,无返回内容。以下是两种修改方案,可根据需求选择:
方案1:逐个返回已上传文件名(返回Flux<String>)
该方案会在每个文件上传完成后,立即返回对应的文件名:
@PostMapping("file/multi") public Flux<String> upload(@RequestPart("files") Flux<FilePart> partFlux){ return partFlux .doOnNext(fp -> System.out.println(fp.filename())) // 保留原打印逻辑 .flatMap(fp -> { String fileName = fp.filename(); // 完成文件保存后返回文件名 return fp.transferTo(basePath.resolve(fileName)) .then(Mono.just(fileName)); }); }
方案2:返回所有已上传文件名的列表(返回Mono<List<String>>)
该方案会在所有文件上传完成后,一次性返回包含所有文件名的列表:
@PostMapping("file/multi") public Mono<List<String>> upload(@RequestPart("files") Flux<FilePart> partFlux){ return partFlux .doOnNext(fp -> System.out.println(fp.filename())) // 保留原打印逻辑 .flatMap(fp -> { String fileName = fp.filename(); return fp.transferTo(basePath.resolve(fileName)) .then(Mono.just(fileName)); }) .collectList(); // 将所有文件名收集为列表 }
关键改动说明:
- 返回类型调整:将原
Mono<Void>改为对应返回类型,确保接口能输出文件名字段 - 结果传递:在
flatMap中,通过then(Mono.just(fileName))将文件名作为保存操作完成后的结果传递出去 - 终止操作修改:移除原有的
.then(),避免丢弃所有操作结果,保留文件名数据供返回使用
内容的提问来源于stack exchange,提问作者gomest
相关产品推荐
相关产品推荐

