diff --git a/.mvn/maven.config b/.mvn/maven.config deleted file mode 100644 index 202d48fe7..000000000 --- a/.mvn/maven.config +++ /dev/null @@ -1,3 +0,0 @@ ---show-version --T -4 \ No newline at end of file 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 90244f596..7afd6dac6 100644 --- a/extension/fileupload/src/site/markdown/index.md +++ b/extension/fileupload/src/site/markdown/index.md @@ -6,3 +6,25 @@ file upload. This extension is available by default for the following runtimes: 1. Piranha Server 1. Piranha Servlet 1. Piranha Web Profile + +## Configuration parameters + +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 + +1. `cloud.piranha.extension.fileupload.fileSizeTreshold` - the file size + threshold (in bytes) before the runtime will create a temporary file on the + filesystem to store the upload. The default is 10240 (10 KB). + +## Setting the configuration parameters using web.xml + +You can set the configuration parameter in the web.xml as illustrated below: + +```xml + + cloud.piranha.extension.fileupload.fileSizeTreshold + 1048576 + +``` diff --git a/extension/tempdir/pom.xml b/extension/tempdir/pom.xml index 48e0498a4..6a6871354 100644 --- a/extension/tempdir/pom.xml +++ b/extension/tempdir/pom.xml @@ -39,4 +39,10 @@ test + + + default + file:///tmp/piranha/extension/tempdir/ + + diff --git a/extension/tempdir/src/site/markdown/index.md b/extension/tempdir/src/site/markdown/index.md new file mode 100644 index 000000000..0133e3a7f --- /dev/null +++ b/extension/tempdir/src/site/markdown/index.md @@ -0,0 +1,10 @@ +# Piranha TEMPDIR Extension + +The TEMPDIR extension delivers the ability for a Piranha runtime to support +the Servlet temporary directory. This extension is available by default for the +following runtimes: + +1. Piranha Server +1. Piranha Servlet +1. Piranha Web Profile + diff --git a/extension/tempdir/src/site/site.xml b/extension/tempdir/src/site/site.xml new file mode 100644 index 000000000..3f0936968 --- /dev/null +++ b/extension/tempdir/src/site/site.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/site/site.xml b/src/site/site.xml index 60e7b20a0..1caad1f93 100644 --- a/src/site/site.xml +++ b/src/site/site.xml @@ -36,6 +36,7 @@ +