当前位置: 首页 > 知识库问答 >
问题:

Spring WebFlux文件上传:不支持的媒体类型415和多部分上传

强化
2023-03-14

我在使用Spring的reactive框架处理文件上传时遇到了一些问题。我想我正在跟踪文档,但无法摆脱415/不支持的媒体类型问题。

package com.test.controllers;

import reactor.core.publisher.Flux;

import org.springframework.http.MediaType;
import org.springframework.http.codec.multipart.FilePart;
import org.springframework.http.codec.multipart.Part;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @RequestMapping(value = "/upload", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public Flux<String> uploadHandler(@RequestBody Flux<Part> parts) {
        return parts
                .filter(part -> part instanceof FilePart)
                .ofType(FilePart.class)
                .log()
                .flatMap(p -> Flux.just(p.filename()));
    }

}
curl -X POST -F "data=@basic.ppt" http://localhost:8080/upload
---
"Unsupported Media Type","message":"Content type 'multipart/form-data;boundary=------------------------537139718d79303c;charset=UTF-8' not supported"

似乎Spring在将这些转换为部分时遇到了问题..?我卡住了--任何帮助都是可取的!

共有1个答案

卓致远
2023-03-14

感谢@kojot的回答,但在本例中,我发现问题是除了spring-webflus之外,还临时包含了spring-webmvc。您的解决方案可能也会起作用,但我想坚持控制器样式,所以最终强行将Spring-WebMVC从我的构建中排除。gradle:

configurations {
    implementation {
        exclude group: 'org.springframework', module: 'spring-webmvc'
    }
}

在那之后,它按记录工作。

 类似资料:
  • 我知道已经有一个类似的问题,但它没有解决上述错误。 这是我在API控制器中的PUT操作,在中运行良好: 以下是我的网页上的代码: HTML 打字稿 我的服务是: 我还使用了尝试上述问题的答案,我将我的文件附加到中,但不幸的是,同样的错误。如果媒体类型中没有任何设置,如何修复此问题?

  • 我的理解是我需要泽西-媒体-多部分依赖 当我尝试发出post请求时,我得到一个415不受支持的媒体类型错误,我不确定为什么。它被设置为消耗MULTIPART_FORM_DATA,参数是一个multipartfile。 编辑我添加了如下配置, 现在我得到了 这里是我的Spring Boot类,它包含附加配置

  • 问题内容: 自数小时以来,我一直在尝试纠正http错误,但它仍显示不支持的页面。我在邮递员中添加标题。 这是我的Java代码 这是我的档案 问题答案: 通过和如何在响应流和请求流之间对对象进行序列化和反序列化。 将会发生的是,将从提供者的注册表中进行搜索,以查找可以处理的媒体类型。如果找不到,则Jersey无法处理该请求,并将发送415不支持的媒体类型。通常,你还应该在服务器端记录一个异常。不知道

  • 我已经创建了一个示例web服务来进行post调用。 我使用的是Jersey JAX-RS和Maven。

  • 它总是给出415不支持的媒体类型错误从邮递员。Header包含带有边界的多部分/表单数据,如下所示CURL调用中所示。还尝试用RequestBody替换RequestPart但没有成功。 当使用FilePart时,我们是否需要以不同的方式调用Spring5中的多部分文件上传API? 然而,将uploads参数从更改为是有效的。 我们不能对RequestPart使用相同的curl调用吗?

  • 问题内容: 我正在尝试使用jQuery 1.6(Jackson 2.1.1 和Spring 3.2.0 )通过JSON通过该方法向数据库中插入和/或更新数据。 JS代码如下。 通过URL映射的Spring控制器内部的方法如下。 服务器按照问题的含义进行响应, 415不支持的媒体类型 标头信息如下所示。 整个文件如下。 当我删除一个方法参数并仅用于接受请求参数时,它可以工作。 问题答案: 浏览器发送