You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2024/03/16 15:34:51 UTC
(struts-site) 01/01: Splits file upload page
This is an automated email from the ASF dual-hosted git repository.
lukaszlenart pushed a commit to branch fix/file-upload-navigation
in repository https://gitbox.apache.org/repos/asf/struts-site.git
commit 0fccbce237ab3d2b4da12ea666d8c027373b86e8
Author: Lukasz Lenart <lu...@apache.org>
AuthorDate: Sat Mar 16 16:34:44 2024 +0100
Splits file upload page
---
.../action-file-upload-interceptor.md | 2 +-
.../{file-upload.md => action-file-upload.md} | 199 ++-------------------
source/core-developers/file-upload.md | 52 ++----
3 files changed, 24 insertions(+), 229 deletions(-)
diff --git a/source/core-developers/action-file-upload-interceptor.md b/source/core-developers/action-file-upload-interceptor.md
index 6019347ef..1c8902407 100644
--- a/source/core-developers/action-file-upload-interceptor.md
+++ b/source/core-developers/action-file-upload-interceptor.md
@@ -10,7 +10,7 @@ parent:
> Available since Struts 6.4.0 as replacement for [File Upload Interceptor](file-upload-interceptor)
-See [this page](file-upload) for more examples and advanced configuration.
+See [this page](action-file-upload) for more examples and advanced configuration.
Interceptor that is based off of `MultiPartRequestWrapper`, which is automatically applied for any request that includes
a file. If an action implements `org.apache.struts2.action.UploadedFilesAware` interface, the interceptor will pass
diff --git a/source/core-developers/file-upload.md b/source/core-developers/action-file-upload.md
similarity index 67%
copy from source/core-developers/file-upload.md
copy to source/core-developers/action-file-upload.md
index 054464f29..94f93950d 100644
--- a/source/core-developers/file-upload.md
+++ b/source/core-developers/action-file-upload.md
@@ -1,12 +1,12 @@
---
layout: default
-title: File Upload
+title: Action File Upload
parent:
title: Action File Upload Interceptor
url: action-file-upload-interceptor
---
-# File Upload
+# Action File Upload
{:.no_toc}
* Will be replaced with the ToC, excluding a header
@@ -24,14 +24,11 @@ than the temporary directory and the directories that belong to your web applica
The Struts 2 framework leverages the Commons FileUpload library as a based library to support file upload in the framework.
The library is included in a base Struts 2 distribution.
-> NOTE: Since Struts 6.4.0 the `FileUploadInterceptor` is deprecated, and you should use `ActionFileUploadInterceptor` instead!
-
## Basic Usage
-The `org.apache.struts2.interceptor.FileUploadInterceptor` and `org.apache.struts2.interceptor.ActionFileUploadInterceptor`
-interceptors are included as part of the `defaultStack` and named appropriately: `fileUpload` and `actionFileUpload`.
-As long as the required libraries are added to your project you will be able to take advantage of the Struts 2 file upload
-capability. Configure an Action mapping for your Action class as you typically would.
+The `org.apache.struts2.interceptor.ActionFileUploadInterceptor` interceptor is included as part of the `defaultStack`
+and named `actionFileUpload`. As long as the required libraries are added to your project you will be able to take
+advantage of the Struts 2 file upload capability. Configure an Action mapping for your Action class as you typically would.
### Example action mapping:
@@ -84,55 +81,6 @@ public class UploadAction extends ActionSupport implements UploadedFilesAware {
}
```
-**Deprecated approach**: the fileUpload interceptor will use setter injection to insert the uploaded file and related data into your Action
-class. For a form field named `upload` you would provide the three setter methods shown in the following example:
-
-### Example Action class:
-
-```java
-package com.example;
-
-import java.io.File;
-
-import com.opensymphony.xwork2.ActionSupport;
-
-public class UploadAction extends ActionSupport {
- private File file;
- private String contentType;
- private String filename;
-
- @StrutsParameter
- public void setUpload(File file) {
- this.file = file;
- }
-
- @StrutsParameter
- public void setUploadContentType(String contentType) {
- this.contentType = contentType;
- }
-
- @StrutsParameter
- public void setUploadFileName(String filename) {
- this.filename = filename;
- }
-
- public String execute() {
- //...
- return SUCCESS;
- }
-}
-```
-
-The purpose of each one of these methods is described in the table below. Notice that if you have multiple file form
-elements with different names you would be required to have another corresponding set of these methods for each file
-uploaded.
-
-| Method Signature | Description |
-|---------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
-| `setX(File file)` | The file that contains the content of the uploaded file. This is a temporary file and file.getName() will not return the original name of the file |
-| `setXContentType(String contentType)` | The mime type of the uploaded file |
-| `setXFileName(String fileName)` | The actual file name of the uploaded file (not the HTML name) |
-
## Uploading Multiple Files
As mentioned in the previous section one technique for uploading multiple files would be to simply have multiple form
@@ -155,131 +103,8 @@ see `struts-fileupload.xml` in the sample application download.
</s:form>
```
-The `org.apache.struts2.action.UploadedFilesAware` interface already supports uploading multiple files, you do not need to
-follow the below example.
-
-**Deprecated approach**: `MultipleFileUploadUsingArrayAction.java`
-
-```java
-public class MultipleFileUploadUsingArrayAction extends ActionSupport {
- private File[] uploads;
- private String[] uploadFileNames;
- private String[] uploadContentTypes;
-
- public String upload() throws Exception {
- System.out.println("\n\n upload2");
- System.out.println("files:");
- for (File u : uploads) {
- System.out.println("*** " + u + "\t" + u.length());
- }
- System.out.println("filenames:");
- for (String n : uploadFileNames) {
- System.out.println("*** " + n);
- }
- System.out.println("content types:");
- for (String c : uploadContentTypes) {
- System.out.println("*** " + c);
- }
- System.out.println("\n\n");
- return SUCCESS;
- }
-
- public File[] getUpload() {
- return this.uploads;
- }
-
- @StrutsParameter
- public void setUpload(File[] upload) {
- this.uploads = upload;
- }
-
- public String[] getUploadFileName() {
- return this.uploadFileNames;
- }
-
- @StrutsParameter
- public void setUploadFileName(String[] uploadFileName) {
- this.uploadFileNames = uploadFileName;
- }
-
- public String[] getUploadContentType() {
- return this.uploadContentTypes;
- }
-
- @StrutsParameter
- public void setUploadContentType(String[] uploadContentType) {
- this.uploadContentTypes = uploadContentType;
- }
-}
-```
-
-### Uploading Multiple Files using Lists
-
-`multipleUploadUsingList.jsp` Notice all file input types have the same name.
-
-```html
-<s:form action="doMultipleUploadUsingList" method="POST" enctype="multipart/form-data">
- <s:file label="File (1)" name="upload"/>
- <s:file label="File (2)" name="upload"/>
- <s:file label="FIle (3)" name="upload"/>
- <s:submit cssClass="btn btn-primary"/>
-</s:form>
-```
-
-`MultipleFileUploadUsingListAction.java`
-
-```java
-public class MultipleFileUploadUsingListAction extends ActionSupport {
- private List<File> uploads = new ArrayList<File>();
- private List<String> uploadFileNames = new ArrayList<String>();
- private List<String> uploadContentTypes = new ArrayList<String>();
-
- public List<File> getUpload() {
- return this.uploads;
- }
-
- @StrutsParameter
- public void setUpload(List<File> uploads) {
- this.uploads = uploads;
- }
-
- public List<String> getUploadFileName() {
- return this.uploadFileNames;
- }
-
- @StrutsParameter
- public void setUploadFileName(List<String> uploadFileNames) {
- this.uploadFileNames = uploadFileNames;
- }
-
- public List<String> getUploadContentType() {
- return this.uploadContentTypes;
- }
-
- @StrutsParameter
- public void setUploadContentType(List<String> contentTypes) {
- this.uploadContentTypes = contentTypes;
- }
-
- public String upload() throws Exception {
- System.out.println("\n\n upload1");
- System.out.println("files:");
- for (File u : uploads) {
- System.out.println("*** " + u + "\t" + u.length());
- }
- System.out.println("filenames:");
- for (String n : uploadFileNames) {
- System.out.println("*** " + n);
- }
- System.out.println("content types:");
- for (String c : uploadContentTypes) {
- System.out.println("*** " + c);
- }
- System.out.println("\n\n");
- return SUCCESS;
- }
-}
-```
+The `org.apache.struts2.action.UploadedFilesAware` interface already supports uploading multiple files, you do not need
+to follow the below example.
## Advanced Configuration
@@ -330,6 +155,7 @@ a file that is too large. Note that the aforementioned settings are applied at t
precedence over this interceptor setting.
Notice the locations of these settings in the following example:
+
```xml
<struts>
<constant name="struts.multipart.maxSize" value="1000000"/>
@@ -347,10 +173,11 @@ Notice the locations of these settings in the following example:
</action>
</struts>
```
+
### Normal Field Size Limit
Since Struts 6.1.2.1 a new option has been introduced to limit the size of a normal string field in the multipart request.
-The defeault limit is set to 4096 bytes:
+The default limit is set to 4096 bytes:
```
struts.multipart.maxStringLength=4096
@@ -451,10 +278,8 @@ follow:
^multipart/form-data(?:\\s*;\\s*boundary=[0-9a-zA-Z'()+_,\\-./:=?]{1,70})?(?:\\s*;\\s*charset=[a-zA-Z\\-0-9]{3,14})?
```
-Please read [RFC1341](https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html) the **Multipart section** for more
-details,
-existing Struts `Multipart` parsers support only `multipart/form-data` content type. This option is available since
-Struts 2.3.11.
+Please read [RFC1341](https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html) the **Multipart section** for more details, existing Struts `Multipart` parsers support
+only `multipart/form-data` content type. This option is available since Struts 2.3.11.
### Disabling file upload support
diff --git a/source/core-developers/file-upload.md b/source/core-developers/file-upload.md
index 054464f29..bcea91170 100644
--- a/source/core-developers/file-upload.md
+++ b/source/core-developers/file-upload.md
@@ -2,8 +2,8 @@
layout: default
title: File Upload
parent:
- title: Action File Upload Interceptor
- url: action-file-upload-interceptor
+ title: File Upload Interceptor
+ url: file-upload-interceptor
---
# File Upload
@@ -12,6 +12,9 @@ parent:
* Will be replaced with the ToC, excluding a header
{:toc}
+> Since Struts 6.4.0 the `FileUploadInterceptor` is deprecated, and you should use [ActionFileUploadInterceptor](action-file-upload-interceptor) instead!
+{:.alert .alert-block .alert-error}
+
The Struts 2 framework provides built-in support for processing file uploads that conform to [RFC 1867](http://www.ietf.org/rfc/rfc1867.txt),
"Form-based File Upload in HTML". When correctly configured the framework will pass uploaded file(s) into your Action
class. Support for individual and multiple file uploads are provided. When a file is uploaded it will typically be
@@ -24,14 +27,11 @@ than the temporary directory and the directories that belong to your web applica
The Struts 2 framework leverages the Commons FileUpload library as a based library to support file upload in the framework.
The library is included in a base Struts 2 distribution.
-> NOTE: Since Struts 6.4.0 the `FileUploadInterceptor` is deprecated, and you should use `ActionFileUploadInterceptor` instead!
-
## Basic Usage
-The `org.apache.struts2.interceptor.FileUploadInterceptor` and `org.apache.struts2.interceptor.ActionFileUploadInterceptor`
-interceptors are included as part of the `defaultStack` and named appropriately: `fileUpload` and `actionFileUpload`.
-As long as the required libraries are added to your project you will be able to take advantage of the Struts 2 file upload
-capability. Configure an Action mapping for your Action class as you typically would.
+The `org.apache.struts2.interceptor.FileUploadInterceptor` interceptor is included as part of the `defaultStack`
+and named `fileUpload`. As long as the required libraries are added to your project you will be able to take
+advantage of the Struts 2 file upload capability. Configure an Action mapping for your Action class as you typically would.
### Example action mapping:
@@ -56,35 +56,7 @@ example:
</s:form>
```
-The actionFileUpload interceptor will use a dedicated interface `org.apache.struts2.action.UploadedFilesAware` to transfer
-information and content of uploaded file. Your action should implement the interface to receive the uploaded file:
-
-```java
-public class UploadAction extends ActionSupport implements UploadedFilesAware {
-
- private UploadedFile uploadedFile;
- private String contentType;
- private String fileName;
- private String originalName;
-
- @Override
- public void withUploadedFiles(List<UploadedFile> uploadedFiles) {
- if (!uploadedFiles.isEmpty()) {
- this.uploadedFile = uploadedFiles.get(0);
- this.fileName = uploadedFile.getName();
- this.contentType = uploadedFile.getContentType();
- this.originalName = uploadedFile.getOriginalName();
- }
- }
-
- public String execute() {
- // do something with the file
- return SUCCESS;
- }
-}
-```
-
-**Deprecated approach**: the fileUpload interceptor will use setter injection to insert the uploaded file and related data into your Action
+The **fileUpload** interceptor will use setter injection to insert the uploaded file and related data into your Action
class. For a form field named `upload` you would provide the three setter methods shown in the following example:
### Example Action class:
@@ -155,10 +127,7 @@ see `struts-fileupload.xml` in the sample application download.
</s:form>
```
-The `org.apache.struts2.action.UploadedFilesAware` interface already supports uploading multiple files, you do not need to
-follow the below example.
-
-**Deprecated approach**: `MultipleFileUploadUsingArrayAction.java`
+**MultipleFileUploadUsingArrayAction.java**
```java
public class MultipleFileUploadUsingArrayAction extends ActionSupport {
@@ -347,6 +316,7 @@ Notice the locations of these settings in the following example:
</action>
</struts>
```
+
### Normal Field Size Limit
Since Struts 6.1.2.1 a new option has been introduced to limit the size of a normal string field in the multipart request.