Multipart 解析器

来自 org.springframework.web.multipart 包的 MultipartResolver 是用于解析包含文件上传的 multipart 请求的策略。对于 Servlet multipart 请求解析,有一个基于容器的 StandardServletMultipartResolver 实现。请注意,基于 Apache Commons FileUpload 的过时 CommonsMultipartResolver 从 Spring Framework 6.0(其新的 Servlet 5.0+ 基线)开始已不再可用。

要启用 multipart 处理,您需要在 DispatcherServlet 的 Spring 配置中声明一个名为 multipartResolverMultipartResolver bean。DispatcherServlet 会检测到它并将其应用于传入请求。当接收到内容类型为 multipart/form-data 的 POST 请求时,解析器会解析内容并将当前的 HttpServletRequest 包装为 MultipartHttpServletRequest,以便除了将部分作为请求参数公开之外,还能访问解析的文件。

Servlet Multipart 解析

Servlet multipart 解析需要通过 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 multipart 配置到位,您可以添加一个类型为 StandardServletMultipartResolver、名称为 multipartResolver 的 bean。

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