适用于Servlet 3.0的Spring 4 Java Config for MultipartResolver

Jay*_*ann 9 java spring servlets spring-mvc spring-java-config

我正在采用全Java方法来进行Spring MVC配置,并且无法弄清楚如何以编程方式将MultipartConfigElement我与我联系起来DispatcherServlet.

Spring文档说明:

为了使用基于Servlet 3.0的多部分解析,您需要在web.xml中使用"multipart-config"部分标记DispatcherServlet,或者在程序化Servlet注册中使用javax.servlet.MultipartConfigElement标记...

http://docs.spring.io/spring/docs/4.0.4.RELEASE/spring-framework-reference/htmlsingle/#mvc-multipart

这是我的WebApplicationInitializer代码:

public class DispatcherServletInitializer implements WebApplicationInitializer {

    private static final Logger logger = LoggerFactory.getLogger(DispatcherServletInitializer.class);

    @Override
    public void onStartup(ServletContext container) {

        // Create the 'root' Spring application context
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.register(AppConfig.class);

        // Manage the lifecycle of the root application context
        container.addListener(new ContextLoaderListener(rootContext));

        // Create the dispatcher servlet's Spring application context
        AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
        dispatcherContext.register(WebConfig.class);

        //HOW CAN I ASSOCIATE THIS CONFIG WITH MY DISPATCHER SERVLET?
        MultipartConfigElement config = new MultipartConfigElement("C:\\Temp", 20848820, 418018841, 1048576);
        DispatcherServlet dispatcherServlet = new DispatcherServlet(dispatcherContext);

        // Register and map the dispatcher servlet
        ServletRegistration.Dynamic dispatcher = 
            container.addServlet("dispatcher", dispatcherServlet);
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/*");
    }

}
Run Code Online (Sandbox Code Playgroud)

我该如何MultipartConfigElement与我联系DispatcherServlet?我没有看到任何方法,如setMultipartConfiguration或任何接受它的构造函数.

另请注意,我的WebConfig声明MultipartResolver:

@Bean
public StandardServletMultipartResolver multipartResolver(){
    return new StandardServletMultipartResolver();
}
Run Code Online (Sandbox Code Playgroud)

但Spring文档指出:

Configuration settings such as maximum sizes or storage locations need to be applied at that Servlet registration level as Servlet 3.0 does not allow for those settings to be done from the MultipartResolver.
Run Code Online (Sandbox Code Playgroud)

任何指导将不胜感激.

Art*_*lan 11

看起来你需要这个:

ServletRegistration.Dynamic dispatcher = 
            container.addServlet("dispatcher", dispatcherServlet);
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/*");

dispatcher.setMultipartConfig(new MultipartConfigElement("/tmp", 1024*1024*5, 1024*1024*5*5, 1024*1024));
Run Code Online (Sandbox Code Playgroud)