文章目录CommonsMultipartResolver和standardservletmultipartresolver的区别在于, 在配置类中配置CommonsMultipartResolver (未实现文件上传(standardservletmultipartresolver )此文档中可用的方法之一) yaml配置文件rtresolver )本文中可用的方法之一)以实现上载文件的常见异常
SpringMVC文件的上传通过MultipartResolver界面进行。 MultipartResolver接口有两个实现类: CommonsMultipartResolver和standardservletmultipartresolver
CommonsMultipartResolver与standardservletmultipartresolver的区别CommonsMultipartResolver使用commons-fileupload处理multipart请求
(1)公共文件上载
(2) commons-io【 commons-fileupload依赖已经依赖包含了commons-io】dependencygroupidcommons-file upload/groupidartifactidcommons-file upload/groupidartifactidcommons (文件上载) ) dependency启用了commons-fileupload依赖项,并且已经启用了commons-io依赖项dependencygroupidcommmons-ii
CommonsMultipartResolver要使用 Apache 的 commons-fileupload 等 jar 包支持,但它能在比较旧的 servlet 版本中使用。
标准服务器基于servlet 3.0处理了multipart请求。StandardServletMultipartResolver不需要第三方 jar 包支持,它使用 servlet 内置的上传功能,但是只能在 Servlet 3 以上的版本使用。Tomcat7.0开始支持Servlet3.0,SpringBoot2.0.4内置Tomcat是8.5.32,所以可以直接使用StandardServletMultipartResolver。
如果未设置为生成multipartResolver对象,则缺省情况下,SpringBoot提供的文件上载自动配置类MultipartAutoConfiguration中的标准服务器多路径设置如果未提供使用@conditionalonmiguration的多部件资源器,则在中, 默认standardservletmultipartresolver @ conditionalonmissingbean (multipart resolver.class ) ) publicstandardservletmultipapan rtresolvermultipartresolver=newstandardservletmultipartresolver (; 多重resolver.setresolvelazily (this.multipart properties.isresolvelazily ); return multipartResolver; 在配置类中配置CommonsMultipartResolver (本文无法上载文件,仅介绍如何配置) @ beanpublicmultipartresolvermultipartresolver (throwsioexception (commonsmultipartresolvermultipartresolver=newcomonsmultior 与ment对应的locationmultipartresolver.setuploadtempdir (newfilesystemresource ((/tmp/spit tr/uploads ) )。 与多点配置对应的最大文件大小多点r
esolver.setMaxUploadSize(2097152); //对应于MultipartConfigElement的fileSizeThreshold multipartResolver.setMaxInMemorySize(0); return multipartResolver;} 通过配置类中配置StandardServletMultipartResolver(本文可采用的方式之一)StandardServletMultipartResolver的配置是在Servlet中通过传入一个MultipartConfigElement实例来指定
@Configuration@EnableWebMvc //启用Spring MVCpublic class WebConfig extends WebMvcConfigurationSupport { /** * 配置multipart解析器 * @return */ @Bean public MultipartResolver multipartResolver(){ return new StandardServletMultipartResolver(); } @Beanpublic MultipartConfigElement multipartConfigElement(){ MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setLocation("D:/"); factory.setMaxFileSize(DataSize.ofMegabytes(5)); factory.setMaxRequestSize(DataSize.ofMegabytes(10000)); return factory.createMultipartConfig();}}如果想限制为KB大小,就使用DataSize.ofKilobytes()这个方法。
如果想限制为MB大小,就使用DataSize.ofMegabytes()这个方法。
如果想限制为字节大小,就使用DataSize.ofBytes()这个方法。
上传文件时,form表单的enctype属性需要设置为multipart/form-data,multipart格式的数据会将一个表单拆分成多个部分(part),每个部分对应一个输入域。
(1)单次上传的文件大小超过阈值
解决办法: 调节上传单个文件大小的阈值
(2)单次请求上传的数据大小超过阈值
解决办法: 调整单次请求上传的数据大小的阈值