From 59736f1cbb76ecd4d708934b74dc9ed09afc6c5c Mon Sep 17 00:00:00 2001 From: Rick Herrick <jrherrick@wustl.edu> Date: Wed, 16 Mar 2016 16:50:06 -0500 Subject: [PATCH] Added support for multipart form resolver, as well as the multipart configuration for the DispatcherServlet. --- .../org/nrg/xapi/configuration/WebConfig.java | 7 ++++ .../initialization/XnatWebAppInitializer.java | 33 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/main/java/org/nrg/xapi/configuration/WebConfig.java b/src/main/java/org/nrg/xapi/configuration/WebConfig.java index 9090c6e5..5cb9a698 100644 --- a/src/main/java/org/nrg/xapi/configuration/WebConfig.java +++ b/src/main/java/org/nrg/xapi/configuration/WebConfig.java @@ -7,6 +7,8 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.web.multipart.MultipartResolver; +import org.springframework.web.multipart.support.StandardServletMultipartResolver; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; @@ -33,6 +35,11 @@ public class WebConfig extends WebMvcConfigurerAdapter { .addResourceLocations("classpath:/META-INF/resources/webjars/"); } + @Bean + public MultipartResolver multipartResolver() { + return new StandardServletMultipartResolver(); + } + @Bean public ViewResolver viewResolver() { return new InternalResourceViewResolver() {{ diff --git a/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java b/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java index 3e65a29e..a3da5859 100644 --- a/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java +++ b/src/main/java/org/nrg/xnat/initialization/XnatWebAppInitializer.java @@ -5,6 +5,7 @@ import org.apache.axis.transport.http.AxisHTTPSessionListener; import org.apache.axis.transport.http.AxisServlet; import org.apache.commons.lang3.StringUtils; import org.apache.turbine.Turbine; +import org.nrg.framework.exceptions.NrgServiceRuntimeException; import org.nrg.framework.processors.XnatModuleBean; import org.nrg.xdat.servlet.XDATAjaxServlet; import org.nrg.xdat.servlet.XDATServlet; @@ -21,6 +22,9 @@ import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatche import javax.servlet.*; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.*; public class XnatWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @@ -74,6 +78,35 @@ public class XnatWebAppInitializer extends AbstractAnnotationConfigDispatcherSer return new Class<?>[0]; } + @Override + protected void customizeRegistration(ServletRegistration.Dynamic registration) { + registration.setMultipartConfig(getMultipartConfigElement()); + } + + private MultipartConfigElement getMultipartConfigElement() { + final String temp; + if (StringUtils.isNotBlank(System.getProperty("xnat.home"))) { + temp = System.getProperty("xnat.home"); + } else { + temp = System.getProperty("java.io.tmpdir"); + } + final String prefix = "xnat_" + Long.toString(System.nanoTime()); + try { + final Path path = Paths.get(temp); + path.toFile().mkdirs(); + final Path tmpDir = Files.createTempDirectory(path, prefix); + return new MultipartConfigElement(tmpDir.toAbsolutePath().toString(), MAX_FILE_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD); + } catch (IOException e) { + throw new NrgServiceRuntimeException("An error occurred trying to create the temp folder " + prefix + " in the containing folder "+ temp); + } + } + + private static final long MAX_FILE_SIZE = 1048576 * 20; // 20 MB max file size. + + private static final long MAX_REQUEST_SIZE = 20971520; // 20MB max request size. + + private static final int FILE_SIZE_THRESHOLD = 0; // Threshold turned off. + private List<Class<?>> getModuleConfigs() { final List<Class<?>> moduleConfigs = new ArrayList<>(); try { -- GitLab