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:50 UTC
(struts-site) branch fix/file-upload-navigation created (now 0fccbce23)
This is an automated email from the ASF dual-hosted git repository.
lukaszlenart pushed a change to branch fix/file-upload-navigation
in repository https://gitbox.apache.org/repos/asf/struts-site.git
at 0fccbce23 Splits file upload page
This branch includes the following new commits:
new 0fccbce23 Splits file upload page
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(struts-site) 01/01: Splits file upload page
Posted by lu...@apache.org.
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.