1.錯誤描述
在application.yml配置文件中設置上傳大小時,使用了Mb的單位
servlet:
multipart:
max-file-size: 10Mb
max-request-size: 10Mb
然後啓動報錯:
二.問題排查解決
看提示是org.springframework.util.unit.DataSize這個配置錯誤,看了一下這個DataSize的構造函數是一個long類型的
private DataSize(long bytes) {
this.bytes = bytes;
}
所有想到把max-file-size的值修改成long類型,如下:
servlet:
multipart:
max-file-size: 10000000
max-request-size: 10000000
啓動,不再報錯。
但是改成純數字的看起來不是那麼直觀,又去看了一下DataSize這個類,發現有一個轉化方法可以直接將字符串傳化爲long類 型,如下:
public static DataSize parse(CharSequence text, @Nullable DataUnit defaultUnit) {
Assert.notNull(text, "Text must not be null");
try {
Matcher matcher = PATTERN.matcher(text);
Assert.state(matcher.matches(), "Does not match data size pattern");
DataUnit unit = determineDataUnit(matcher.group(2), defaultUnit);
long amount = Long.parseLong(matcher.group(1));
return of(amount, unit);
} catch (Exception var6) {
throw new IllegalArgumentException("'" + text + "' is not a valid data size", var6);
}
}
// of方法
public static DataSize of(long amount, DataUnit unit) {
Assert.notNull(unit, "Unit must not be null");
return new DataSize(Math.multiplyExact(amount, unit.size().toBytes()));
}
其中匹配的字符串類型必須是全部大寫且長度爲2,即在寫10MB的時候,MB要全部大寫,且不能只寫成10M,MB要寫全
最終的配置:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
再啓動,發現可以正常啓動