Multipart 解析器
org.springframework.web.multipart
包中的 MultipartResolver
是一种用于解析包括文件上传在内的 multipart 请求的策略。
对于 Servlet multipart 请求解析,有一个基于容器的 StandardServletMultipartResolver
实现。
请注意,随着 Spring Framework 6.0 及其新的 Servlet 5.0+ 基线,基于 Apache Commons FileUpload 的过时 CommonsMultipartResolver
已不再可用。
要启用 multipart 处理,您需要在 DispatcherServlet
Spring 配置中声明一个名为 multipartResolver
的 MultipartResolver
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 解析器,
可能会使应用程序面临容器实现差异。
默认情况下,它会尝试解析任何 |