Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down Expand Up @@ -119,6 +134,16 @@ public static final boolean isMultipartContent(final RequestContext ctx) {
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.
*/
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.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,16 @@ private void assertHeaders(final String[] headerNames, final String[] headerValu
}
}

@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));
}
}

/**
* Tests <a href="https://issues.apache.org/jira/browse/FILEUPLOAD-239">FILEUPLOAD-239</a>
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,19 +44,14 @@
*/
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.
*
* @param request The servlet request to be evaluated. Must be non-null.
* @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 AbstractFileUpload.isMultipartRequestMethod(request.getMethod()) && AbstractFileUpload.isMultipartContent(new JakartaServletRequestContext(request));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,19 +44,14 @@
*/
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.
*
* @param request The servlet request to be evaluated. Must be non-null.
* @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 AbstractFileUpload.isMultipartRequestMethod(request.getMethod()) && AbstractFileUpload.isMultipartContent(new JakartaServletRequestContext(request));
}

/**
Expand Down
Loading