问题描述
在Spring Boot应用中出现以下错误:
Failed to bind properties under 'spring.servlet.multipart.max-file-size’ to org.springframework.util.unit.Datasize
Property:spring.servlet.multipart.max-file-sizeValue: 10Mb
Origin: URL [file:./application-dev.yml]:23:22
Reason:failed to convert java.lang.String to org.springframework.util.unit.Datasize
错误原因
格式不正确:Spring Boot 2.x及以上版本使用
DataSize
类型处理大小配置单位错误:使用了
Mb
而不是MB
大小写敏感:Spring Boot对单位的大小写有严格要求
解决方案
正确配置格式
在application.yml
或application.properties
中使用以下格式:
YAML格式
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
Properties格式
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
可用单位
Spring Boot接受的存储单位(区分大小写):
单位 | 说明 | 示例 |
---|---|---|
B | 字节 | 1024B |
KB | 千字节(1024B) | 10KB |
MB | 兆字节(1024KB) | 10MB |
GB | 千兆字节(1024MB) | 1GB |
TB | 万亿字节(1024GB) | 1TB |
常见错误写法
使用小写单位:
10mb
❌使用比特单位:
10Mb
❌ (Mb表示兆比特,不是兆字节)值与单位间有空格:
10 MB
❌使用旧版格式:
maxFileSize
❌ (Spring Boot 2.x后已弃用)
完整配置示例
spring:
servlet:
multipart:
enabled: true
max-file-size: 20MB # 单个文件最大大小
max-request-size: 50MB # 整个请求最大大小
file-size-threshold: 1MB # 文件大小阈值,超过此值会写入磁盘
location: /tmp # 临时文件存储位置
注意事项
版本差异:
Spring Boot 1.x使用
maxFileSize
等属性Spring Boot 2.x+使用
max-file-size
等属性
实际限制:
max-file-size
≤max-request-size
建议
max-request-size
设置为max-file-size
的2-3倍
测试验证:
启动应用时检查控制台输出的配置值
使用Postman或curl测试大文件上传
参考文档
通过以上配置调整,文件大小限制的绑定错误应该能够解决。如果问题仍然存在,建议检查Spring Boot版本并确保没有其他配置覆盖了这些值。