diff --git a/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/FileUploadAction.java b/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/FileUploadAction.java
index 279c1e928..bdcc2e5bb 100644
--- a/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/FileUploadAction.java
+++ b/apps/showcase/src/main/java/org/apache/struts2/showcase/fileupload/FileUploadAction.java
@@ -37,6 +37,7 @@ public class FileUploadAction extends ActionSupport implements UploadedFilesAwar
private String fileName;
private String caption;
private String originalName;
+ private String inputName;
public String input() throws Exception {
return SUCCESS;
@@ -58,6 +59,10 @@ public class FileUploadAction extends ActionSupport implements UploadedFilesAwar
return originalName;
}
+ public String getInputName() {
+ return inputName;
+ }
+
public Object getUploadedFile() {
return uploadedFile.getContent();
}
@@ -85,5 +90,6 @@ public class FileUploadAction extends ActionSupport implements UploadedFilesAwar
this.fileName = uploadedFile.getName();
this.contentType = uploadedFile.getContentType();
this.originalName = uploadedFile.getOriginalName();
+ this.inputName = uploadedFile.getInputName();
}
}
diff --git a/apps/showcase/src/main/webapp/WEB-INF/fileupload/upload-success.jsp b/apps/showcase/src/main/webapp/WEB-INF/fileupload/upload-success.jsp
index 576772550..e694b75b9 100644
--- a/apps/showcase/src/main/webapp/WEB-INF/fileupload/upload-success.jsp
+++ b/apps/showcase/src/main/webapp/WEB-INF/fileupload/upload-success.jsp
@@ -1,51 +1,52 @@
<%@ page
- language="java"
- contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
+ language="java"
+ contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
- Struts2 Showcase - Fileupload sample
+ Struts2 Showcase - Fileupload sample
-
-
-
- - ContentType:
- - FileName:
- - Original FileName:
- - File:
- - Size:
- - Caption:
-
-
-
+
+
+
+ - ContentType:
+ - FileName:
+ - Original FileName:
+ - File:
+ - Caption:
+ - Size:
+ - Input name:
+
+
+
diff --git a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileUploadTest.java b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileUploadTest.java
index cb168ab46..c0baaf3a8 100644
--- a/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileUploadTest.java
+++ b/apps/showcase/src/test/java/it/org/apache/struts2/showcase/FileUploadTest.java
@@ -59,7 +59,8 @@ public class FileUploadTest {
"ContentType: text/plain",
"Original FileName: " + tempFile.getName(),
"Caption: some caption",
- "Size: 12"
+ "Size: 12",
+ "Input name: upload"
);
}
}
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
index 154c174db..3a76adc40 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
@@ -118,6 +118,7 @@ public class JakartaMultiPartRequest extends AbstractMultiPartRequest {
.create(item.getPath().toFile())
.withOriginalName(item.getName())
.withContentType(item.getContentType())
+ .withInputName(item.getFieldName())
.build();
values.add(uploadedFile);
}
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
index df7b07e22..cebd60250 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
@@ -251,6 +251,7 @@ public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest {
.create(file)
.withOriginalName(fileName)
.withContentType(fileItemInput.getContentType())
+ .withInputName(fileItemInput.getFieldName())
.build();
if (uploadedFiles.containsKey(fieldName)) {
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/StrutsUploadedFile.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/StrutsUploadedFile.java
index eb9e93c36..492b46fb0 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/StrutsUploadedFile.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/StrutsUploadedFile.java
@@ -25,11 +25,13 @@ public class StrutsUploadedFile implements UploadedFile {
private final File file;
private final String contentType;
private final String originalName;
+ private final String inputName;
- private StrutsUploadedFile(File file, String contentType, String originalName) {
+ private StrutsUploadedFile(File file, String contentType, String originalName, String inputName) {
this.file = file;
this.contentType = contentType;
this.originalName = originalName;
+ this.inputName = inputName;
}
@Override
@@ -72,18 +74,25 @@ public class StrutsUploadedFile implements UploadedFile {
return originalName;
}
+ @Override
+ public String getInputName() {
+ return inputName;
+ }
+
@Override
public String toString() {
return "StrutsUploadedFile{" +
- "contentType='" + contentType + '\'' +
- ", originalName='" + originalName + '\'' +
- '}';
+ "contentType='" + contentType + '\'' +
+ ", originalName='" + originalName + '\'' +
+ ", inputName='" + inputName + '\'' +
+ '}';
}
public static class Builder {
private final File file;
private String contentType;
private String originalName;
+ private String inputName;
private Builder(File file) {
this.file = file;
@@ -103,8 +112,13 @@ public class StrutsUploadedFile implements UploadedFile {
return this;
}
+ public Builder withInputName(String inputName) {
+ this.inputName = inputName;
+ return this;
+ }
+
public UploadedFile build() {
- return new StrutsUploadedFile(this.file, this.contentType, this.originalName);
+ return new StrutsUploadedFile(this.file, this.contentType, this.originalName, this.inputName);
}
}
}
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/UploadedFile.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/UploadedFile.java
index ddebac122..c0af59742 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/UploadedFile.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/UploadedFile.java
@@ -65,4 +65,13 @@ public interface UploadedFile extends Serializable {
*/
String getContentType();
+ /**
+ * Represents a name of the input file, eg.:
+ * "myFile" in case of
+ *
+ * @return name of the input file field
+ * @since 6.7.0
+ */
+ String getInputName();
+
}
diff --git a/core/src/test/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequestTest.java b/core/src/test/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequestTest.java
index 9803a876d..22625cdf9 100644
--- a/core/src/test/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequestTest.java
+++ b/core/src/test/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequestTest.java
@@ -102,6 +102,8 @@ abstract class AbstractMultiPartRequestTest {
.isEqualTo("test1.csv");
assertThat(file.getContentType())
.isEqualTo("text/csv");
+ assertThat(file.getInputName())
+ .isEqualTo("file1");
assertThat(file.getContent()).asInstanceOf(InstanceOfAssertFactories.FILE)
.exists()
.content()
@@ -114,6 +116,8 @@ abstract class AbstractMultiPartRequestTest {
.isEqualTo("test2.csv");
assertThat(file.getContentType())
.isEqualTo("text/csv");
+ assertThat(file.getInputName())
+ .isEqualTo("file2");
assertThat(file.getContent())
.asInstanceOf(InstanceOfAssertFactories.FILE)
.exists()
@@ -152,6 +156,8 @@ abstract class AbstractMultiPartRequestTest {
.isEqualTo("test1.csv");
assertThat(file.getContentType())
.isEqualTo("text/csv");
+ assertThat(file.getInputName())
+ .isEqualTo("file1");
assertThat(file.getContent()).asInstanceOf(InstanceOfAssertFactories.FILE)
.exists()
.content()
@@ -164,6 +170,8 @@ abstract class AbstractMultiPartRequestTest {
.isEqualTo("test2.csv");
assertThat(file.getContentType())
.isEqualTo("text/csv");
+ assertThat(file.getInputName())
+ .isEqualTo("file1");
assertThat(file.getContent())
.asInstanceOf(InstanceOfAssertFactories.FILE)
.exists()
@@ -202,6 +210,8 @@ abstract class AbstractMultiPartRequestTest {
.isEqualTo("test1.csv");
assertThat(file.getContentType())
.isEqualTo("text/csv");
+ assertThat(file.getInputName())
+ .isEqualTo("file1");
assertThat(file.getContent())
.asInstanceOf(InstanceOfAssertFactories.FILE)
.exists()
@@ -213,6 +223,8 @@ abstract class AbstractMultiPartRequestTest {
.isTrue();
assertThat(file.getOriginalName())
.isEqualTo("test2.csv");
+ assertThat(file.getInputName())
+ .isEqualTo("file2");
assertThat(file.getContent())
.asInstanceOf(InstanceOfAssertFactories.FILE)
.exists()
@@ -249,6 +261,8 @@ abstract class AbstractMultiPartRequestTest {
.isEqualTo("test1.csv");
assertThat(file.getContentType())
.isEqualTo("text/csv");
+ assertThat(file.getInputName())
+ .isEqualTo("file1");
assertThat(file.getContent()).asInstanceOf(InstanceOfAssertFactories.FILE)
.exists()
.content()
@@ -261,6 +275,8 @@ abstract class AbstractMultiPartRequestTest {
.isEqualTo("test2.csv");
assertThat(file.getContentType())
.isEqualTo("text/csv");
+ assertThat(file.getInputName())
+ .isEqualTo("file2");
assertThat(file.getContent())
.asInstanceOf(InstanceOfAssertFactories.FILE)
.exists()
diff --git a/core/src/test/java/org/apache/struts2/interceptor/ActionFileUploadInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/ActionFileUploadInterceptorTest.java
index 5b63c7147..ec1195490 100644
--- a/core/src/test/java/org/apache/struts2/interceptor/ActionFileUploadInterceptorTest.java
+++ b/core/src/test/java/org/apache/struts2/interceptor/ActionFileUploadInterceptorTest.java
@@ -91,6 +91,11 @@ public class ActionFileUploadInterceptorTest extends StrutsInternalTestCase {
public String getContentType() {
return null;
}
+
+ @Override
+ public String getInputName() {
+ return null;
+ }
};
private MockHttpServletRequest request;