You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Kotlin接口文件上传报错:Required part 'file'不存在

解决Spring Boot Kotlin接口接收form-data文件时的MissingServletRequestPartException问题

可能的原因及解决步骤

1. 显式指定接口的请求内容类型

当前接口未指定consumes属性,虽然Spring会自动适配,但显式声明multipart/form-data可以避免解析歧义:

@PostMapping("/refunds", consumes = [MediaType.MULTIPART_FORM_DATA_VALUE])
fun uploadFileToS3(@RequestPart("file") file: MultipartFile): ResponseEntity<String> {
    // 原有逻辑
}

2. 检查Multipart配置是否正常

Spring Boot默认自动配置Multipart支持,但如果自定义过配置,需确保相关参数正确:
在application.properties中添加或验证:

spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=10MB # 根据需求调整大小
spring.servlet.multipart.max-request-size=10MB

避免因文件大小限制或配置禁用导致解析失败。

3. 验证Postman请求的正确性

  • 确认form-data的key严格为file(区分大小写,无空格或拼写错误),且已正确选择上传文件(输入框显示文件名)。
  • 不要手动设置Content-Type头,Postman会自动生成带正确boundary的multipart/form-data头,手动设置会导致解析失败。
  • 用Postman的「Code」功能生成curl命令,在终端执行测试,排除Postman客户端问题:
    curl --location 'http://localhost:8888/refunds' \
    --form 'file=@"/本地文件路径/测试文件.csv"'
    

4. 检查控制器参数配置

  • 确认MultipartFile的导入包正确:org.springframework.web.multipart.MultipartFile,避免导入错误的类。
  • 尝试替换@RequestPart为@RequestParam测试(两者在文件上传场景下均可使用,部分场景下@RequestParam兼容性更好):
    fun uploadFileToS3(@RequestParam("file") file: MultipartFile): ResponseEntity<String> {
        // 原有逻辑
    }
    

5. 排查拦截器/过滤器干扰

如果项目中有自定义拦截器或过滤器,需确保它们不会提前读取请求的输入流(比如日志过滤器、权限校验过滤器),否则Spring无法解析multipart数据。可以临时禁用自定义拦截器,测试接口是否正常。

6. 启用调试日志定位问题

在application.properties中添加日志配置,查看multipart解析的详细过程:

logging.level.org.springframework.web.multipart=DEBUG
logging.level.org.springframework.web.servlet=DEBUG

通过日志可以确认请求是否被正确识别为multipart类型,以及文件部分是否被解析到。


内容的提问来源于stack exchange,提问作者Kunj Bosamia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:50:06