多部分解析器

org.springframework.web.multipart包中的MultipartResolver是用于解析包括文件上传在内的多部分请求的策略。有一个基于容器的StandardServletMultipartResolver实现,用于解析Servlet多部分请求。请注意,基于Apache Commons FileUpload的过时的CommonsMultipartResolver在Spring Framework 6.0中不再可用,因为它采用了新的Servlet 5.0+基线。

要启用多部分处理,您需要在DispatcherServlet Spring配置中声明一个名为multipartResolverMultipartResolver bean。 DispatcherServlet会检测到它并将其应用于传入请求。当接收到内容类型为multipart/form-data的POST请求时,解析器会解析内容,将当前的HttpServletRequest包装为MultipartHttpServletRequest,以便提供对已解析文件的访问,同时将部分作为请求参数暴露出来。

Servlet多部分解析

需要通过Servlet容器配置启用Servlet多部分解析。要实现这一点:

  • 在Java中,在Servlet注册上设置MultipartConfigElement

  • web.xml中,在servlet声明中添加一个"<multipart-config>"部分。

以下示例显示了如何在Servlet注册上设置MultipartConfigElement

  • Java

  • Kotlin

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

	// ...

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

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

}
class AppInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {

	// ...

	override fun customizeRegistration(registration: ServletRegistration.Dynamic) {

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

}

一旦Servlet多部分配置就绪,您可以添加一个类型为StandardServletMultipartResolver且名称为multipartResolver的bean。

此解析器变体直接使用您的Servlet容器的多部分解析器,可能会使应用程序暴露于容器实现差异。默认情况下,它将尝试解析任何带有任何HTTP方法的multipart/内容类型,但这可能不受所有Servlet容器支持。有关详细信息和配置选项,请参阅StandardServletMultipartResolver的javadoc。