Multipart Resolver
org.springframework.web.multipart
包中的 MultipartResolver
是一种策略,用于解析包括文件上传在内的多部分请求。有一个基于容器的 StandardServletMultipartResolver
实现,用于 Servlet 多部分请求解析。请注意,已经过时的 CommonsMultipartResolver
(基于 Apache Commons FileUpload)不再可用了,自 Spring Framework 6.0 及其新的 Servlet 5.0+ 基线以来。
要启用多部分处理,你需要在 DispatcherServlet
Spring 配置中声明一个 MultipartResolver
Bean,其名称为 multipartResolver
。DispatcherServlet
会检测它并将其应用于传入的请求。当接收到内容类型为 multipart/form-data
的 POST 请求时,解析器解析内容,将当前的 HttpServletRequest
包装为 MultipartHttpServletRequest
,除了将部分公开为请求参数,还提供对已解析文件的访问。
Servlet Multipart Parsing
需要通过 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 多部分配置就绪,你就可以添加一个名为 multipartResolver
且类型为 StandardServletMultipartResolver
的 Bean。
该解析器变体会按原样使用您的 Servlet 容器的多部件解析器,可能导致应用程序受到容器实现差异的影响。默认情况下,它将尝试使用任何 HTTP 方法解析任何 |