如何使用Webflux上传多个文件?
如何使用Webflux上传多个文件?
我发送内容类型的请求:multipart/form-data
正文包含一个 ,该 值是一组文件。
要处理单个文件,请按以下步骤操作:
Mono<MultiValueMap<String, Part> body = request.body(toMultipartData());body.flatMap(map -> FilePart part = (FilePart) map.toSingleValueMap().get("file"));
但是如何对多个文件执行此操作?
PS。还有另一种方法可以在webflux中上传一组文件吗?
回答:
我已经找到了一些解决方案。假设我们发送带有参数 的http POST请求,该参数 包含我们的文件。
注释响应是任意的
@PostMapping("/upload") public Mono<String> process(@RequestPart("files") Flux<FilePart> filePartFlux) {
return filePartFlux.flatMap(it -> it.transferTo(Paths.get("/tmp/" + it.filename())))
.then(Mono.just("OK"));
}
@PostMapping("/upload-model") public Mono<String> processModel(@ModelAttribute Model model) {
model.getFiles().forEach(it -> it.transferTo(Paths.get("/tmp/" + it.filename())));
return Mono.just("OK");
}
class Model {
private List<FilePart> files;
//getters and setters
}
public Mono<ServerResponse> upload(ServerRequest request) { Mono<String> then = request.multipartData().map(it -> it.get("files"))
.flatMapMany(Flux::fromIterable)
.cast(FilePart.class)
.flatMap(it -> it.transferTo(Paths.get("/tmp/" + it.filename())))
.then(Mono.just("OK"));
return ServerResponse.ok().body(then, String.class);
}
以上是 如何使用Webflux上传多个文件? 的全部内容, 来源链接: utcz.com/qa/430845.html