问题现象:
SpringBoot项目由1.5.x升级到2.x,文件上传启动报错
配置文件
#文件上传路径 linux配置路径 spring.servlet.multipart.max-file-size=50Mb spring.servlet.multipart.max-request-size=50Mb file.upload.realpath=D:/csizgcardmanage/files
报错信息
Failed to bind properties under 'spring.servlet.multipart.max-request-size' to org.springframework.util.unit.DataSize: Property: spring.servlet.multipart.max-request-size Value: 50Mb Origin: class path resource [application-dev.properties]:36:43 Reason: failed to convert java.lang.String to org.springframework.util.unit.DataSize Action: Update your application's configuration
原因分析:
转换为Long型的数值
/** * Obtain a {@link DataSize} representing the specified number of megabytes. * @param megabytes the number of megabytes, positive or negative * @return a {@link DataSize} */ public static DataSize ofMegabytes(long megabytes) { return new DataSize(Math.multiplyExact(megabytes, BYTES_PER_MB)); }
通过源码分析,我们知道,文件上传的数值,需要是Long型
spring.servlet.multipart.max-file-size=50000000
单位的英文全大写(推荐)
带单位的字符串是支持的,不过单位的英文貌似必须写全而且是全大写,比如5MB、5KB、5B(5)这样,DataSize有个parse(CharSequence text)方法
/** * Obtain a {@link DataSize} from a text string such as {@code 12MB} using * {@link DataUnit#BYTES} if no unit is specified. * <p> * Examples: * <pre> * "12KB" -- parses as "12 kilobytes" * "5MB" -- parses as "5 megabytes" * "20" -- parses as "20 bytes" * </pre> * @param text the text to parse * @return the parsed {@link DataSize} * @see #parse(CharSequence, DataUnit) */ public static DataSize parse(CharSequence text) { return parse(text, null); }
通过源码分析,带单位的字符串是支持的,不过单位的英文貌似必须写全而且是全大写,比如5MB、5KB
spring.servlet.multipart.max-file-size=50MB