说在前面
前期回顾
sharding-jdbc源码解析 更新完毕
spring源码解析 更新完毕
spring-mvc源码解析 更新完毕
spring-tx源码解析 更新完毕
spring-boot源码解析 更新完毕
rocketmq源码解析 更新完毕
dubbbo源码解析 更新完毕
netty源码解析 更新完毕
spring源码架构更新完毕
spring-mvc源码架构更新完毕
springboot源码架构更新中
github https://github.com/tianheframe
sharding-jdbc源码解析 更新完毕
rocketmq源码解析 更新完毕
seata 源码解析 更新完毕
dubbo 源码解析 更新完毕
netty 源码解析 更新完毕
源码解析
org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration多部分上传的自动配置。如果没有提供标准servletmultipartresolver,则添加一个;如果没有定义,则添加一个multipartConfigElement。EmbeddedWebApplicationContext将MultipartConfigElement bean与任何Servlet bean关联起来。
MultipartConfigElement是一个Servlet API,用于配置容器如何处理文件上传。默认情况下
@Configuration@ConditionalOnClass({ Servlet.class, StandardServletMultipartResolver.class, MultipartConfigElement.class })@ConditionalOnProperty(prefix = "spring.http.multipart", name = "enabled", matchIfMissing = true)@EnableConfigurationProperties(MultipartProperties.class)public class MultipartAutoConfiguration {
监测 Servlet.class, StandardServletMultipartResolver.class,MultipartConfigElement.class,监测spring.http.multipart.enabled属性,加载MultipartProperties配置
org.springframework.boot.autoconfigure.web.MultipartProperties
用于配置MultipartConfigElement的属性。location指定上载文件存储的目录。未指定时,将使用临时目录。max-file-size指定上传文件允许的最大大小。默认为1MB。
max-request-size指定多部分/表单数据请求允许的最大大小。默认为10MB。文件大小阈值指定文件写入磁盘后的大小阈值。默认值是0。这些属性最终会传递给MultipartConfigFactory,这意味着您可以使用长值指定数值,或者使用接受KB或MB后缀的更具可读性的字符串变体。
@ConfigurationProperties(prefix = "spring.http.multipart", ignoreUnknownFields = false)public class MultipartProperties {
属性名以spring.http.multipart开头
private boolean enabled = true;
上传配置加载
private String location;
上传文件路径
private String maxFileSize = "1MB";
最大文件大小
private String maxRequestSize = "10MB";
最大请求文件大小
private String fileSizeThreshold = "0";
阈值,之后文件将被写入磁盘。值可以使用后缀“MB”或“KB”分别表示兆字节或千字节。
private boolean resolveLazily = false;
是否在文件访问或参数访问时延迟解析多部分请求。
private final MultipartProperties multipartProperties;
multipartProperties
@Bean @ConditionalOnMissingBean({ MultipartConfigElement.class, CommonsMultipartResolver.class }) public MultipartConfigElement multipartConfigElement() { return this.multipartProperties.createMultipartConfig(); }
没检测到 MultipartConfigElement.class,CommonsMultipartResolver.class初始化MultipartConfigElement
@Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) @ConditionalOnMissingBean(MultipartResolver.class) public StandardServletMultipartResolver multipartResolver() { StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver(); multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily()); return multipartResolver; }
没检测到MultipartResolver初始化StandardServletMultipartResolver
说在最后
本次解析仅代表个人观点,仅供参考。
扫码进入技术微信群
钉钉技术群qq技术群