diff --git a/jakarta-dependencies/binary-transformed-to-jakarta/commons-fileupload-jakarta/pom.xml b/jakarta-dependencies/binary-transformed-to-jakarta/commons-fileupload-jakarta/pom.xml
deleted file mode 100644
index 9ec45e0ad3..0000000000
--- a/jakarta-dependencies/binary-transformed-to-jakarta/commons-fileupload-jakarta/pom.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
- 4.0.0
-
-
- org.alfresco
- binary-transformed-to-jakarta
- 1.0-SNAPSHOT
-
-
- commons-fileupload
- commons-fileupload-jakarta
- jar
- 1.5
-
-
-
- Apache 2
- https://www.apache.org/licenses/LICENSE-2.0.txt
- repo
-
-
-
-
-
-
- commons-fileupload
- commons-fileupload
- 1.5
-
-
-
-
-
-
-
- org.eclipse.transformer
- transformer-maven-plugin
-
-
- transform-jar
-
- jar
-
-
-
- commons-fileupload
- commons-fileupload
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/jakarta-dependencies/binary-transformed-to-jakarta/pom.xml b/jakarta-dependencies/binary-transformed-to-jakarta/pom.xml
index 795da66dec..c264302254 100644
--- a/jakarta-dependencies/binary-transformed-to-jakarta/pom.xml
+++ b/jakarta-dependencies/binary-transformed-to-jakarta/pom.xml
@@ -32,6 +32,5 @@
apache-chemistry
- commons-fileupload-jakarta
\ No newline at end of file
diff --git a/jakarta-dependencies/build-dependencies.sh b/jakarta-dependencies/build-dependencies.sh
index 9a00c93dfd..180b4d36d8 100755
--- a/jakarta-dependencies/build-dependencies.sh
+++ b/jakarta-dependencies/build-dependencies.sh
@@ -20,7 +20,7 @@ function clone_and_install {
mvn -f $project_path -B clean install -DskipTests -Dmaven.javadoc.skip=true
}
-clone_and_install surf-webscripts
+clone_and_install surf-webscripts "feature/acs-5424_apache_fileupload_replace"
clone_and_install alfresco-greenmail
clone_and_install alfresco-tas-utility
clone_and_install alfresco-tas-email
diff --git a/pom.xml b/pom.xml
index 8de2b02298..9abb0b5b78 100644
--- a/pom.xml
+++ b/pom.xml
@@ -423,11 +423,6 @@
commons-digester
2.1
-
- commons-fileupload
- commons-fileupload-jakarta
- 1.5
-
org.apache.httpcomponents
diff --git a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java
index 7effece754..4ddbbc20ed 100644
--- a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java
+++ b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/AbortTransferCommandProcessor.java
@@ -32,7 +32,6 @@ import jakarta.servlet.http.HttpServletRequest;
import org.alfresco.service.cmr.transfer.TransferException;
import org.alfresco.service.cmr.transfer.TransferReceiver;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.webscripts.Status;
diff --git a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/CommandProcessorUtils.java b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/CommandProcessorUtils.java
new file mode 100644
index 0000000000..196538eba8
--- /dev/null
+++ b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/CommandProcessorUtils.java
@@ -0,0 +1,42 @@
+/*
+ * #%L
+ * Alfresco Remote API
+ * %%
+ * Copyright (C) 2005 - 2023 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.repo.web.scripts.transfer;
+
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.http.MediaType;
+
+public class CommandProcessorUtils
+{
+ public static boolean isMultipartContent(HttpServletRequest servletRequest)
+ {
+ if(!servletRequest.getMethod().equalsIgnoreCase("post"))
+ {
+ return false;
+ }
+ String contentType = servletRequest.getContentType();
+ return contentType != null && contentType.toLowerCase().startsWith(MediaType.MULTIPART_FORM_DATA_VALUE);
+ }
+}
diff --git a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java
index 87eef2bb48..e6c53cac68 100644
--- a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java
+++ b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostContentCommandProcessor.java
@@ -30,17 +30,19 @@ import jakarta.servlet.http.HttpServletRequest;
import org.alfresco.service.cmr.transfer.TransferException;
import org.alfresco.service.cmr.transfer.TransferReceiver;
-import org.apache.commons.fileupload.FileItemIterator;
-import org.apache.commons.fileupload.FileItemStream;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.WebScriptResponse;
import org.springframework.extensions.webscripts.WrappingWebScriptRequest;
+import org.springframework.extensions.webscripts.servlet.FormData;
import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest;
-import org.springframework.extensions.webscripts.servlet.FormData.FormField;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import static org.alfresco.repo.web.scripts.transfer.CommandProcessorUtils.isMultipartContent;
/**
* This command processor is used to receive one or more content files for a given transfer.
@@ -105,7 +107,7 @@ public class PostContentCommandProcessor implements CommandProcessor
//Read the transfer id from the request
String transferId = servletRequest.getParameter("transferId");
- if ((transferId == null) || !ServletFileUpload.isMultipartContent(servletRequest))
+ if ((transferId == null) || !isMultipartContent(servletRequest))
{
resp.setStatus(Status.STATUS_BAD_REQUEST);
return Status.STATUS_BAD_REQUEST;
@@ -113,17 +115,16 @@ public class PostContentCommandProcessor implements CommandProcessor
try
{
-
- ServletFileUpload upload = new ServletFileUpload();
- FileItemIterator iter = upload.getItemIterator(servletRequest);
+
+ FormData formData = new FormData(servletRequest);
+ Iterator iter = Arrays.stream(formData.getFields()).iterator();
while (iter.hasNext())
{
- FileItemStream item = iter.next();
- String name = item.getFieldName();
- if (!item.isFormField())
+ FormData.FormField formField = iter.next();
+ if (formField.getIsFile())
{
- logger.debug("got content Mime Part : " + name);
- receiver.saveContent(transferId, item.getName(), item.openStream());
+ logger.debug("got content Mime Part : " + formField.getName());
+ receiver.saveContent(transferId, formField.getFilename(), formField.getInputStream());
}
}
diff --git a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java
index 8ac155f06d..f4f1425c57 100644
--- a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java
+++ b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PostSnapshotCommandProcessor.java
@@ -27,24 +27,26 @@
package org.alfresco.repo.web.scripts.transfer;
import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.Iterator;
import jakarta.servlet.http.HttpServletRequest;
import org.alfresco.repo.transfer.TransferCommons;
import org.alfresco.service.cmr.transfer.TransferException;
import org.alfresco.service.cmr.transfer.TransferReceiver;
-import org.apache.commons.fileupload.FileItemIterator;
-import org.apache.commons.fileupload.FileItemStream;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.WebScriptResponse;
import org.springframework.extensions.webscripts.WrappingWebScriptRequest;
+import org.springframework.extensions.webscripts.servlet.FormData;
import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest;
import org.springframework.extensions.webscripts.servlet.FormData.FormField;
+import static org.alfresco.repo.web.scripts.transfer.CommandProcessorUtils.isMultipartContent;
+
/**
* This command processor is used to receive the snapshot for a given transfer.
*
@@ -100,7 +102,7 @@ public class PostSnapshotCommandProcessor implements CommandProcessor
//Read the transfer id from the request
String transferId = servletRequest.getParameter("transferId");
- if ((transferId == null) || !ServletFileUpload.isMultipartContent(servletRequest))
+ if ((transferId == null) || !isMultipartContent(servletRequest))
{
logger.debug("bad request, not multipart");
resp.setStatus(Status.STATUS_BAD_REQUEST);
@@ -111,15 +113,15 @@ public class PostSnapshotCommandProcessor implements CommandProcessor
{
logger.debug("about to upload manifest file");
- ServletFileUpload upload = new ServletFileUpload();
- FileItemIterator iter = upload.getItemIterator(servletRequest);
- while (iter.hasNext())
+ FormData formData = new FormData(servletRequest);
+ Iterator iter = Arrays.stream(formData.getFields()).iterator();
+ while (iter.hasNext())
{
- FileItemStream item = iter.next();
- if (!item.isFormField() && TransferCommons.PART_NAME_MANIFEST.equals(item.getFieldName()))
+ FormField formField = iter.next();
+ if (formField.getIsFile() && TransferCommons.PART_NAME_MANIFEST.equals(formField.getName()))
{
logger.debug("got manifest file");
- receiver.saveSnapshot(transferId, item.openStream());
+ receiver.saveSnapshot(transferId, formField.getInputStream());
}
}
diff --git a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java
index 672b556c95..cea7cf0a2d 100644
--- a/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java
+++ b/remote-api/src/main/java/org/alfresco/repo/web/scripts/transfer/PrepareTransferCommandProcessor.java
@@ -30,10 +30,8 @@ import java.io.StringWriter;
import jakarta.servlet.http.HttpServletRequest;
-import org.alfresco.repo.transfer.TransferServiceImpl;
import org.alfresco.service.cmr.transfer.TransferException;
import org.alfresco.service.cmr.transfer.TransferReceiver;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.webscripts.Status;
diff --git a/repository/pom.xml b/repository/pom.xml
index 186b1d87f1..29a9e0b0f8 100644
--- a/repository/pom.xml
+++ b/repository/pom.xml
@@ -83,10 +83,6 @@
org.apache.commons
commons-dbcp2
-
- commons-fileupload
- commons-fileupload-jakarta
-
org.apache.commons
commons-compress