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 @@
*
*
*
- * - Sets the MultiPartManager to an instance of FileUploadMultiPartManager.
- * - Adds the JakartaFileCleaner listener that cleans up the temporary files.
+ * - Sets the MultiPartManager to an instance of
+ * FileUploadMultiPartManager.
+ * - Adds the JakartaFileCleaner listener that cleans up the temporary
+ * files.
*
*
* @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 @@