多部分解析器

MultipartResolver 来自 org.springframework.web.multipart 包是一种用于解析包括文件上传在内的多部分请求的策略。存在一个基于容器的 StandardServletMultipartResolver 实现,用于Servlet多部分请求解析。spring-doc.cadn.net.cn

要启用多部分处理,您需要在您的 MultipartResolver Spring配置中声明一个名称为multipartResolverDispatcherServlet bean。 DispatcherServlet会检测到它,并将其应用于传入的请求。当接收到内容类型为multipart/form-data的POST请求时,解析器会解析内容,将当前HttpServletRequest包装为MultipartHttpServletRequest,以提供对已解析文件的访问,同时还将各部分作为请求参数公开。spring-doc.cadn.net.cn

Servlet 多部分解析

Servlet 多部分解析需要通过 Servlet 容器配置来启用。 为此:spring-doc.cadn.net.cn

以下示例展示了如何在Servlet注册中设置MultipartConfigElementspring-doc.cadn.net.cn

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override
	protected String[] getServletMappings() {
		...
	}

	@Override
	protected Class<?> @Nullable [] getRootConfigClasses() {
		...
	}

	@Override
	protected Class<?> @Nullable [] getServletConfigClasses() {
		...
	}

	@Override
	protected void customizeRegistration(ServletRegistration.Dynamic registration) {

		// Optionally also set maxFileSize, maxRequestSize, fileSizeThreshold
		registration.setMultipartConfig(new MultipartConfigElement("/tmp"));
	}
}
class AppInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {

	override fun getServletMappings(): Array<out String> {
		...
	}

	override fun getRootConfigClasses(): Array<out Class<*>>? {
		...
	}

	override fun getServletConfigClasses(): Array<out Class<*>>? {
		...
	}

	override fun customizeRegistration(registration: ServletRegistration.Dynamic) {

		// Optionally also set maxFileSize, maxRequestSize, fileSizeThreshold
		registration.setMultipartConfig(MultipartConfigElement("/tmp"))
	}

}

Servlet多部分配置完成后,您可以添加一个类型为StandardServletMultipartResolver、名称为multipartResolver的bean。spring-doc.cadn.net.cn

此解析器变体直接使用您的Servlet容器的多部分解析器,可能会使应用程序暴露于容器实现差异中。默认情况下,它会尝试使用任何 multipart/ 内容类型和任何HTTP方法进行解析,但并非所有Servlet容器都支持此功能。有关详细信息和配置选项,请参阅 StandardServletMultipartResolver javadoc。spring-doc.cadn.net.cn