This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-fileupload.git
The following commit(s) were added to refs/heads/master by this push:
new 036f98e3 [FILEUPLOAD-367]
*ServletFileUpload.isMultipartContent(HttpServletRequest) should allow PUT and
PATCH request methods in addition to POST.
036f98e3 is described below
commit 036f98e3ea93987cc295a24f1fed9be44587c10a
Author: Gary Gregory <[email protected]>
AuthorDate: Sun Feb 8 10:33:45 2026 -0500
[FILEUPLOAD-367]
*ServletFileUpload.isMultipartContent(HttpServletRequest) should allow
PUT and PATCH request methods in addition to POST.
- Add AbstractFileUpload.isMultipartRequestMethod(String).
- Based on PR #469.
---
.../fileupload2/core/AbstractFileUpload.java | 26 ++++++++++++++++++++++
.../fileupload2/core/AbstractFileUploadTest.java | 10 +++++++++
.../jakarta/servlet5/JakartaServletFileUpload.java | 7 +-----
.../jakarta/servlet6/JakartaServletFileUpload.java | 7 +-----
.../fileupload2/javax/JavaxServletFileUpload.java | 7 +-----
src/changes/changes.xml | 2 ++
6 files changed, 41 insertions(+), 18 deletions(-)
diff --git
a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/core/AbstractFileUpload.java
b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/core/AbstractFileUpload.java
index 5695ceeb..6d4e64e3 100644
---
a/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/core/AbstractFileUpload.java
+++
b/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/core/AbstractFileUpload.java
@@ -61,6 +61,21 @@ public abstract class AbstractFileUpload<R, I extends
FileItem<I>, F extends Fil
*/
private static final String FILENAME_KEY = "filename";
+ /**
+ * Constant for HTTP POST method.
+ */
+ private static final String POST_METHOD = "POST";
+
+ /**
+ * Constant for HTTP PUT method.
+ */
+ private static final String PUT_METHOD = "PUT";
+
+ /**
+ * Constant for HTTP PATCH method.
+ */
+ private static final String PATCH_METHOD = "PATCH";
+
/**
* HTTP content type header name.
*/
@@ -119,6 +134,17 @@ public abstract class AbstractFileUpload<R, I extends
FileItem<I>, F extends Fil
return contentType.toLowerCase(Locale.ROOT).startsWith(MULTIPART);
}
+ /**
+ * Checks if a given request method is a valid multipart request method.
+ *
+ * @param method The request method verb.
+ * @return {@code true} if the request method supports multipart request
payloads; {@code false} otherwise.
+ * @since 2.0.0-M5
+ */
+ protected static boolean isMultipartRequestMethod(final String method) {
+ return POST_METHOD.equalsIgnoreCase(method) ||
PUT_METHOD.equalsIgnoreCase(method) || PATCH_METHOD.equalsIgnoreCase(method);
+ }
+
/**
* The maximum size permitted for the complete request, as opposed to
{@link #maxFileSize}. A value of -1 indicates no maximum.
*/
diff --git
a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/core/AbstractFileUploadTest.java
b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/core/AbstractFileUploadTest.java
index abc1aa39..0995040e 100644
---
a/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/core/AbstractFileUploadTest.java
+++
b/commons-fileupload2-core/src/test/java/org/apache/commons/fileupload2/core/AbstractFileUploadTest.java
@@ -396,6 +396,16 @@ public abstract class AbstractFileUploadTest<AFU extends
AbstractFileUpload<R, I
assertEquals("fieldValue2", field2.getString());
}
+ @Test
+ void testIsMultipartRequestMethod() {
+ for (String allowed : new String[]{"POST", "PUT", "PATCH"}) {
+ assertTrue(AbstractFileUpload.isMultipartRequestMethod(allowed));
+ }
+ for (String disallowed : new String[]{"GET", "HEAD", "DELETE",
"CONNECT", "OPTIONS", "TRACE"}) {
+
assertFalse(AbstractFileUpload.isMultipartRequestMethod(disallowed));
+ }
+ }
+
/**
* Test for multipart/mixed with no boundary defined
*/
diff --git
a/commons-fileupload2-jakarta-servlet5/src/main/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUpload.java
b/commons-fileupload2-jakarta-servlet5/src/main/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUpload.java
index c28b00b4..b80bd469 100644
---
a/commons-fileupload2-jakarta-servlet5/src/main/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUpload.java
+++
b/commons-fileupload2-jakarta-servlet5/src/main/java/org/apache/commons/fileupload2/jakarta/servlet5/JakartaServletFileUpload.java
@@ -44,11 +44,6 @@ import jakarta.servlet.http.HttpServletRequest;
*/
public class JakartaServletFileUpload<I extends FileItem<I>, F extends
FileItemFactory<I>> extends AbstractFileUpload<HttpServletRequest, I, F> {
- /**
- * Constant for HTTP POST method.
- */
- private static final String POST_METHOD = "POST";
-
/**
* Tests whether the request contains multipart content.
*
@@ -56,7 +51,7 @@ public class JakartaServletFileUpload<I extends FileItem<I>,
F extends FileItemF
* @return {@code true} if the request is multipart; {@code false}
otherwise.
*/
public static final boolean isMultipartContent(final HttpServletRequest
request) {
- return POST_METHOD.equalsIgnoreCase(request.getMethod()) &&
AbstractFileUpload.isMultipartContent(new
JakartaServletRequestContext(request));
+ return isMultipartRequestMethod(request.getMethod()) &&
isMultipartContent(new JakartaServletRequestContext(request));
}
/**
diff --git
a/commons-fileupload2-jakarta-servlet6/src/main/java/org/apache/commons/fileupload2/jakarta/servlet6/JakartaServletFileUpload.java
b/commons-fileupload2-jakarta-servlet6/src/main/java/org/apache/commons/fileupload2/jakarta/servlet6/JakartaServletFileUpload.java
index 60b52500..cb44c777 100644
---
a/commons-fileupload2-jakarta-servlet6/src/main/java/org/apache/commons/fileupload2/jakarta/servlet6/JakartaServletFileUpload.java
+++
b/commons-fileupload2-jakarta-servlet6/src/main/java/org/apache/commons/fileupload2/jakarta/servlet6/JakartaServletFileUpload.java
@@ -44,11 +44,6 @@ import jakarta.servlet.http.HttpServletRequest;
*/
public class JakartaServletFileUpload<I extends FileItem<I>, F extends
FileItemFactory<I>> extends AbstractFileUpload<HttpServletRequest, I, F> {
- /**
- * Constant for HTTP POST method.
- */
- private static final String POST_METHOD = "POST";
-
/**
* Tests whether the request contains multipart content.
*
@@ -56,7 +51,7 @@ public class JakartaServletFileUpload<I extends FileItem<I>,
F extends FileItemF
* @return {@code true} if the request is multipart; {@code false}
otherwise.
*/
public static final boolean isMultipartContent(final HttpServletRequest
request) {
- return POST_METHOD.equalsIgnoreCase(request.getMethod()) &&
AbstractFileUpload.isMultipartContent(new
JakartaServletRequestContext(request));
+ return isMultipartRequestMethod(request.getMethod()) &&
isMultipartContent(new JakartaServletRequestContext(request));
}
/**
diff --git
a/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/JavaxServletFileUpload.java
b/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/JavaxServletFileUpload.java
index a7249e67..9295628f 100644
---
a/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/JavaxServletFileUpload.java
+++
b/commons-fileupload2-javax/src/main/java/org/apache/commons/fileupload2/javax/JavaxServletFileUpload.java
@@ -44,11 +44,6 @@ import
org.apache.commons.fileupload2.core.FileUploadException;
*/
public class JavaxServletFileUpload<I extends FileItem<I>, F extends
FileItemFactory<I>> extends AbstractFileUpload<HttpServletRequest, I, F> {
- /**
- * Constant for HTTP POST method.
- */
- private static final String POST_METHOD = "POST";
-
/**
* Tests whether the request contains multipart content.
*
@@ -56,7 +51,7 @@ public class JavaxServletFileUpload<I extends FileItem<I>, F
extends FileItemFac
* @return {@code true} if the request is multipart; {@code false}
otherwise.
*/
public static final boolean isMultipartContent(final HttpServletRequest
request) {
- return POST_METHOD.equalsIgnoreCase(request.getMethod()) &&
AbstractFileUpload.isMultipartContent(new JavaxServletRequestContext(request));
+ return isMultipartRequestMethod(request.getMethod()) &&
AbstractFileUpload.isMultipartContent(new JavaxServletRequestContext(request));
}
/**
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b6a7ca03..c42eab81 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -55,6 +55,8 @@ The <action> type attribute can be add,update,fix,remove.
<action type="fix" dev="ggregory" due-to="Gary
Gregory">Fix Apache RAT plugin console warnings.</action>
<!-- ADD -->
<action type="add" dev="ggregory" due-to="Ryan J
Murphy">Add AbstractFileUpload support for a maximum part header size
#429.</action>
+ <action issue="FILEUPLOAD-367" type="add" dev="ggregory" due-to="Gary
Gregory">Jakarta and Javax
ServletFileUpload.isMultipartContent(HttpServletRequest) should allow PUT and
PATCH request methods in addition to POST.</action>
+ <action issue="FILEUPLOAD-367" type="add" dev="ggregory" due-to="Gary
Gregory">Add AbstractFileUpload.isMultipartRequestMethod(String).</action>
<!-- UPDATE -->
<action type="update" dev="ggregory" due-to="Gary Gregory,
Dependabot">Bump org.apache.commons:commons-parent from 84 to 96 #444, #459,
#463.</action>
<action type="update" dev="ggregory" due-to="Gary Gregory">Bump
org.apache.commons:commons-lang3 from 3.17.0 to 3.20.0 #427.</action>