一尘不染

如何启用Spring Reactive Web MVC来处理多部分文件?

spring-boot

我正在尝试在Spring Boot 2.0应用程序中使用新的反应式Web-
mvc实现。我正在尝试定义一个消耗多部分文件的方法,但未成功使它工作:(-我总是收到415错误。

一方面,我有一个包含以下请求映射的控制器:

@RequestMapping(method = RequestMethod.POST, path = "/myPath/{param}/{param2}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseBody
public Mono<Void> postFile(
        @RequestBody MultipartFile data,
        @PathVariable("param") String param,
        @PathVariable("param2") String param2,
        @RequestHeader(name = HEADER_DATE, required = false)   @DateTimeFormat(pattern = DATE_FORMAT) Instant instant
){
    return fileService.handleData(Mono.just(data), param, param2, instant);
}

另一方面,我不得不在基本依赖项的顶部添加服务器,因为netty似乎无法处理多部分文件。因此,我添加了spring-boot-starter- tomcat依赖项,从而使MultipartAutoConfiguration能够在应用程序自动配置上得到匹配和满足。

使用curl调用发布内容时: curl 'Meta-Date: 20170101104532' --form "file=@file.bin" http://localhost:8082/myPath/foo/bar
激活了调试日志(logging.level.org.springframework.web=DEBUG)时,出现了此异常:
org.springframework.web.server.UnsupportedMediaTypeStatusException: Request failure [status: 415, reason: "Content type 'multipart/form- data;boundary=------------------------58fa43b8f1a26de4' not supported"]

RequestBodyArgumentResolver具有以下受支持的媒体类型的引发此错误:[*/*, text/xml, application/*+json;charset=UTF-8, application/xml, text/plain;charset=UTF-8, application/x-www-form-urlencoded, application/json;charset=UTF-8]由9提供DecoderHttpMessageReader

发布之前,我还查看了:

  • Spring MultiPart MediaType不支持,在这里似乎不相关,因为我的autoconf报告包含以下条目:MultipartAutoConfiguration#multipartResolver matched
  • 使用angularjs $ http将content-type设置为utf-8添加标题设置Content-Transfer-Encoding:binary并没有改变任何东西。

我的理解是Spring Web 5.0使用了新的请求解码器系统,因为我没有在Spring 4 spring
boot应用程序中找到这些类,并且还没有DecoderHttpMessageReader处理多部分文件我错过了什么吗?还是我应该等一个实施?


阅读 228

收藏
2020-05-30

共1个答案

一尘不染

好的,似乎暂时还没有实现,因为它当前存在对此功能的拉取请求:添加响应式多部分请求支持#1201

应该早点检查一下…

[编辑]:该问题已解决,已合并到Spring master分支中。应该不再是一个问题。

2020-05-30