如何在 Spring Boot 中使用 multipart/form-data 处理没有 Content-Disposition 标头的 POST

Posted

技术标签:

【中文标题】如何在 Spring Boot 中使用 multipart/form-data 处理没有 Content-Disposition 标头的 POST【英文标题】:How process POST with multipart/form-data without Content-Disposition header in Spring Boot 【发布时间】:2019-02-25 13:45:24 【问题描述】:

我正在使用 Sprin Boot,我需要处理这种类型的请求:

POST /post HTTP/1.0
content-type: multipart/form-data;boundary=482CFA229C8C00EBE48F4FAE633EDB4A0
content-length: 157
x-numbercomps: 1 
user-agent: SAP NetWeaver Application Server (1.0;750)
host: 172.0.0.1:8080
accept-encoding: gzip

--482CFA229C8C00EBE48F4FAE633EDB4A0
Content-Type: text/plain
Content-Length: 11
X-compId: test.txt

content
--482CFA229C8C00EBE48F4FAE633EDB4A0--

控制器:

@PostMapping(value = "/**", params = "create", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String createPost(HttpServletRequest request,
                         @RequestParam MultipartFile... files) 
    //do some staff

    return "";

在控制器中没有错误,但MuiltipartFiles的数量为0

没有 Content-Disposition Spring 无法识别 MultipartFile。

有人知道如何处理吗?

谢谢。

【问题讨论】:

您能否展示您的控制器以及您在发布多部分时收到的错误消息 将控制器添加到主帖。没有错误.. 【参考方案1】:

我使用了您的控制器并发布了多个文件,似乎没有问题,并检查了所有标题,我的标题中没有 Content-Disposition,但我可以看到所有文件的详细信息。似乎问题是发送请求而不是 Spring 启动端。

请看下面的截图:

这是我收到的标题,没有Content-Disposition

【讨论】:

Content-Disposition 不是 httpHeader,它是关于 multipartFile 部分的标头。如果您查看原始请求,您可以看到此标头。在您的情况下,此标头包含 fileName = "file1".

以上是关于如何在 Spring Boot 中使用 multipart/form-data 处理没有 Content-Disposition 标头的 POST的主要内容,如果未能解决你的问题,请参考以下文章

带有 OAuth 的 Spring Boot Security Multi Http 不起作用

Spring Boot Multi-Module maven 项目重新打包失败

Spring Boot Multi Module Gradle Project 类路径问题:Package Not Found, Symbol not Found

企业级 Spring Boot 教程 (十七)上传文件

无法集成测试 gradle 多模块 Spring-Boot-Application

Spring Boot:RESTful 控制器中的多层@Services 用于许多入站请求