对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

Multipart解析器

MultipartResolver 来自 org.springframework.web.multipart 包,是一种用于解析多部分(multipart)请求(包括文件上传)的策略。Spring 提供了一个基于容器的 StandardServletMultipartResolver 实现,用于解析 Servlet 多部分请求。请注意,从 Spring Framework 6.0 开始,由于其新的 Servlet 5.0+ 基线要求,基于 Apache Commons FileUpload 的过时实现 CommonsMultipartResolver 已不再可用。spring-doc.cadn.net.cn

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

Servlet 多部分解析

需要通过 Servlet 容器配置来启用 Servlet 的 multipart 解析功能。 为此,请执行以下操作:spring-doc.cadn.net.cn

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

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。spring-doc.cadn.net.cn

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