You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:35:27