问题描述
在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: 10MBmax-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: truemax-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官方文档 - 文件上传
-
DataSize类文档
通过以上配置调整,文件大小限制的绑定错误应该能够解决。如果问题仍然存在,建议检查Spring Boot版本并确保没有其他配置覆盖了这些值。