多部分解析器
org.springframework.web.multipart
包中的MultipartResolver
是用于解析包括文件上传在内的多部分请求的策略。有一个基于容器的StandardServletMultipartResolver
实现,用于解析Servlet多部分请求。请注意,基于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容器配置启用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多部分配置就绪,您可以添加一个类型为StandardServletMultipartResolver
且名称为multipartResolver
的bean。
此解析器变体直接使用您的Servlet容器的多部分解析器,可能会使应用程序暴露于容器实现差异。默认情况下,它将尝试解析任何带有任何HTTP方法的 |