diff --git a/extension/fileupload/src/main/java/cloud/piranha/extension/fileupload/FileUploadMultiPartInitializer.java b/extension/fileupload/src/main/java/cloud/piranha/extension/fileupload/FileUploadMultiPartInitializer.java index 3a38b2bfa..1af604ba0 100644 --- a/extension/fileupload/src/main/java/cloud/piranha/extension/fileupload/FileUploadMultiPartInitializer.java +++ b/extension/fileupload/src/main/java/cloud/piranha/extension/fileupload/FileUploadMultiPartInitializer.java @@ -44,8 +44,10 @@ *

* *
    - *
  1. Sets the MultiPartManager to an instance of FileUploadMultiPartManager.
  2. - *
  3. Adds the JakartaFileCleaner listener that cleans up the temporary files.
  4. + *
  5. Sets the MultiPartManager to an instance of + * FileUploadMultiPartManager.
  6. + *
  7. Adds the JakartaFileCleaner listener that cleans up the temporary + * files.
  8. *
* * @author Manfred Riem (mriem@manorrock.com) @@ -62,13 +64,17 @@ public class FileUploadMultiPartInitializer implements ServletContainerInitializ */ public FileUploadMultiPartInitializer() { } - + @Override public void onStartup(Set> classes, ServletContext servletContext) throws ServletException { WebApplication webApplication = (WebApplication) servletContext; - LOGGER.log(TRACE, "Setting the MultiPartManager"); + if (LOGGER.isLoggable(TRACE)) { + LOGGER.log(TRACE, "Setting the MultiPartManager"); + } webApplication.getManager().setMultiPartManager(new FileUploadMultiPartManager()); - LOGGER.log(TRACE, "Adding the listener used to cleanup temporary files"); + if (LOGGER.isLoggable(TRACE)) { + LOGGER.log(TRACE, "Adding the listener used to cleanup temporary files"); + } webApplication.addListener("org.apache.commons.fileupload2.jakarta.servlet6.JakartaFileCleaner"); } } diff --git a/extension/fileupload/src/main/java/cloud/piranha/extension/fileupload/FileUploadMultiPartManager.java b/extension/fileupload/src/main/java/cloud/piranha/extension/fileupload/FileUploadMultiPartManager.java index 44d875549..520d8f9bb 100644 --- a/extension/fileupload/src/main/java/cloud/piranha/extension/fileupload/FileUploadMultiPartManager.java +++ b/extension/fileupload/src/main/java/cloud/piranha/extension/fileupload/FileUploadMultiPartManager.java @@ -65,6 +65,12 @@ public class FileUploadMultiPartManager implements MultiPartManager { private static final String FILE_SIZE_THRESHOLD_NAME = "cloud.piranha.extension.fileupload.fileSizeTreshold"; + /** + * Stores the constant for the output directory. + */ + private static final String OUTPUT_DIRECTORY_NAME + = "cloud.piranha.extension.fileupload.outputDirectory"; + /** * Stores the logger. */ @@ -142,17 +148,40 @@ public Part getPart(WebApplication webApplication, WebApplicationRequest request private synchronized JakartaServletFileUpload setupFileUpload(WebApplication webApplication, MultipartConfigElement multipartConfig) { JakartaServletFileUpload upload = (JakartaServletFileUpload) webApplication.getAttribute(FileUploadMultiPartManager.class.getName()); if (upload == null) { - File outputDirectory; - if (multipartConfig.getLocation() == null || multipartConfig.getLocation().isEmpty()) { - outputDirectory = (File) webApplication.getAttribute(TEMPDIR); - } else { + /* + * Default to TEMPDIR. + */ + File outputDirectory = (File) webApplication.getAttribute(TEMPDIR); + /* + * If the multipart config has a location use it. If it is relative + * use the TEMPDIR as the parent directory. + */ + if (multipartConfig.getLocation() != null && !multipartConfig.getLocation().isEmpty()) { File location = new File(multipartConfig.getLocation()); if (!location.isAbsolute()) { location = ((File) webApplication.getAttribute(TEMPDIR)).toPath().resolve(location.toPath()).toFile(); } outputDirectory = location; } + /* + * If OUTPUT_DIRECTORY_NAME is set use it. + */ + if (webApplication.getInitParameter(OUTPUT_DIRECTORY_NAME) != null) { + outputDirectory = new File(webApplication.getInitParameter(OUTPUT_DIRECTORY_NAME)); + } + /* + * Default to 10240 (10 KB). + */ int sizeThreshold = 10240; + /* + * If the multipart config has a size > 0 use it. + */ + if (multipartConfig.getFileSizeThreshold() != 0) { + sizeThreshold = multipartConfig.getFileSizeThreshold(); + } + /* + * If FILE_SIZE_THRESHOLD_NAME is set use it. + */ if (webApplication.getInitParameter(FILE_SIZE_THRESHOLD_NAME) != null) { try { sizeThreshold = Integer.parseInt(webApplication.getInitParameter("cloud.piranha.extension.fileupload.fileSizeTreshold")); @@ -160,9 +189,6 @@ private synchronized JakartaServletFileUpload setupFileUpload(WebApplication web // ignore and let defaults apply. } } - if (multipartConfig.getFileSizeThreshold() != 0) { - sizeThreshold = multipartConfig.getFileSizeThreshold(); - } DiskFileItemFactory factory = DiskFileItemFactory .builder() .setBufferSize(sizeThreshold) diff --git a/extension/fileupload/src/site/markdown/index.md b/extension/fileupload/src/site/markdown/index.md index aae3e1032..7afd6dac6 100644 --- a/extension/fileupload/src/site/markdown/index.md +++ b/extension/fileupload/src/site/markdown/index.md @@ -13,7 +13,6 @@ The following configuration parameters are available: 1. `cloud.piranha.extension.fileupload.outputDirectory` - the directory where the file upload will store temporary files. The default is the location as - of the ServletContext TEMPDIR. 1. `cloud.piranha.extension.fileupload.fileSizeTreshold` - the file size threshold (in bytes) before the runtime will create a temporary file on the