問題描述
在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版本并確保沒有其他配置覆蓋了這些值。