Multipart 解析器

MultipartResolver 来自 org.springframework.web.multipart 包,是一种用于解析 multipart 请求(包括文件上传)的策略。有一个基于容器的 StandardServletMultipartResolver 实现,用于解析 Servlet multipart 请求。请注意,基于 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 多部分配置就位后,您可以添加一个名为 multipartResolverStandardServletMultipartResolver 类型的 bean。

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