#tomcat #mono #spring-webflux #multipart #reactive
#tomcat #моно #spring-webflux #составная #реактивный
Вопрос:
Я хочу загрузить видео, используя реактивную парадигму. Я пытаюсь создать контроллер, который будет принимать Mono как @RequestPart и сохранять его в MongoDB через реактивный поток (Spring webflux).
Мой контроллер выглядит так:
@PostMapping(value = "/add/react", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Mono<ResponseEntity> upload(@RequestPart(name = "file") Mono<FilePart>fileParts) throws Exception {
return fileParts
.flatMap(part -> this.gridFsTemplate.store(part.content(), part.filename()))
.map((id) -> ok().body(Map.of("id", id.toHexString())));
}
Я пытаюсь добавить составной файл через Postman:
введите описание изображения здесь
Но, в конце концов, я получаю это сообщение
2021-02-23 16:38:26.498 WARN 23456 --- [nio-8088-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'video/mp4' not supported]
Не могли бы вы мне помочь, пожалуйста? Я искал Google в течение 2 дней и ничего не нашел.
Ответ №1:
Проблема с кодом, который я использовал Tomcat. Но Tomcat не может преобразовать многокомпонентный файл в Flux / Mono, решение моей проблемы — сменить веб-сервер. Вместо Tomcat я теперь использую Netty. И все работает нормально
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-reactor-netty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
Комментарии:
1. Это действительно так, не работает на Tomcat. Не могли бы вы указать источник, откуда вы это узнали?