多部分解析器
MultipartResolver
来自 org.springframework.web.multipart
包,是一种解析多部分请求(包括文件上传)的策略。对于 Servlet 多部分请求解析,有一个基于容器的 StandardServletMultipartResolver
实现。请注意,基于 Apache Commons FileUpload 的过时的 CommonsMultipartResolver
从 Spring Framework 6.0 开始已不再可用,因为它的新 Servlet 5.0+ 基线。
要启用多部分处理,您需要在 DispatcherServlet
的 Spring 配置中声明一个名为 multipartResolver
的 MultipartResolver
bean。DispatcherServlet
会检测到它并将其应用于传入的请求。当接收到内容类型为 multipart/form-data
的 POST 请求时,解析器会解析内容,并将当前的 HttpServletRequest
包装为 MultipartHttpServletRequest
,以提供对解析文件的访问,并将部分内容作为请求参数暴露。
Servlet 多部分解析
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
的 bean,名称为 multipartResolver
。
此解析器变体使用您的 Servlet 容器的多部分解析器,可能会暴露应用程序到容器实现的差异。默认情况下,它将尝试解析任何 multipart/
内容类型与任何 HTTP 方法,但这在所有 Servlet 容器中可能不受支持。有关详细信息和配置选项,请参见 StandardServletMultipartResolver 的 javadoc。