This is an automated email from the ASF dual-hosted git repository.
git-site-role pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/struts-site.git
The following commit(s) were added to refs/heads/asf-staging by this push:
new 26bb2d7fc Updates stage by Jenkins
26bb2d7fc is described below
commit 26bb2d7fc6b5f3be3cc57b502913c6e5417f3092
Author: jenkins <[email protected]>
AuthorDate: Sat Mar 16 15:52:09 2024 +0000
Updates stage by Jenkins
---
.../action-file-upload-interceptor.html | 2 +-
.../{file-upload.html => action-file-upload.html} | 218 ++-------------------
content/core-developers/file-upload.html | 50 +----
3 files changed, 23 insertions(+), 247 deletions(-)
diff --git a/content/core-developers/action-file-upload-interceptor.html
b/content/core-developers/action-file-upload-interceptor.html
index 310dffc9d..7f8b86562 100644
--- a/content/core-developers/action-file-upload-interceptor.html
+++ b/content/core-developers/action-file-upload-interceptor.html
@@ -156,7 +156,7 @@
<p>Available since Struts 6.4.0 as replacement for <a
href="file-upload-interceptor">File Upload Interceptor</a></p>
</blockquote>
-<p>See <a href="file-upload">this page</a> for more examples and advanced
configuration.</p>
+<p>See <a href="action-file-upload">this page</a> for more examples and
advanced configuration.</p>
<p>Interceptor that is based off of <code class="language-plaintext
highlighter-rouge">MultiPartRequestWrapper</code>, which is automatically
applied for any request that includes
a file. If an action implements <code class="language-plaintext
highlighter-rouge">org.apache.struts2.action.UploadedFilesAware</code>
interface, the interceptor will pass
diff --git a/content/core-developers/file-upload.html
b/content/core-developers/action-file-upload.html
similarity index 61%
copy from content/core-developers/file-upload.html
copy to content/core-developers/action-file-upload.html
index b3e1253f5..f6e1d9988 100644
--- a/content/core-developers/file-upload.html
+++ b/content/core-developers/action-file-upload.html
@@ -7,7 +7,7 @@
<meta http-equiv="Content-Language" content="en"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <title>File Upload</title>
+ <title>Action File Upload</title>
<link
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
rel="stylesheet" type="text/css">
<link
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css"
rel="stylesheet">
@@ -146,23 +146,21 @@
<article class="container">
<section class="col-md-12">
- <a class="edit-on-gh"
href="https://github.com/apache/struts-site/edit/master/source/core-developers/file-upload.md"
title="Edit this page on GitHub">Edit on GitHub</a>
+ <a class="edit-on-gh"
href="https://github.com/apache/struts-site/edit/master/source/core-developers/action-file-upload.md"
title="Edit this page on GitHub">Edit on GitHub</a>
<a href="action-file-upload-interceptor" title="back to Action File Upload
Interceptor"><< back to Action File Upload Interceptor</a>
- <h1 class="no_toc" id="file-upload">File Upload</h1>
+ <h1 class="no_toc" id="action-file-upload">Action File Upload</h1>
<ul id="markdown-toc">
<li><a href="#dependencies"
id="markdown-toc-dependencies">Dependencies</a></li>
<li><a href="#basic-usage" id="markdown-toc-basic-usage">Basic Usage</a>
<ul>
<li><a href="#example-action-mapping"
id="markdown-toc-example-action-mapping">Example action mapping:</a></li>
<li><a href="#example-jsp-form-tags"
id="markdown-toc-example-jsp-form-tags">Example JSP form tags:</a></li>
- <li><a href="#example-action-class"
id="markdown-toc-example-action-class">Example Action class:</a></li>
</ul>
</li>
<li><a href="#uploading-multiple-files"
id="markdown-toc-uploading-multiple-files">Uploading Multiple Files</a> <ul>
<li><a href="#uploading-multiple-files-using-arrays"
id="markdown-toc-uploading-multiple-files-using-arrays">Uploading Multiple
Files using Arrays</a></li>
- <li><a href="#uploading-multiple-files-using-lists"
id="markdown-toc-uploading-multiple-files-using-lists">Uploading Multiple Files
using Lists</a></li>
</ul>
</li>
<li><a href="#advanced-configuration"
id="markdown-toc-advanced-configuration">Advanced Configuration</a> <ul>
@@ -191,16 +189,11 @@ than the temporary directory and the directories that
belong to your web applica
<p>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.</p>
-<blockquote>
- <p>NOTE: Since Struts 6.4.0 the <code class="language-plaintext
highlighter-rouge">FileUploadInterceptor</code> is deprecated, and you should
use <code class="language-plaintext
highlighter-rouge">ActionFileUploadInterceptor</code> instead!</p>
-</blockquote>
-
<h2 id="basic-usage">Basic Usage</h2>
-<p>The <code class="language-plaintext
highlighter-rouge">org.apache.struts2.interceptor.FileUploadInterceptor</code>
and <code class="language-plaintext
highlighter-rouge">org.apache.struts2.interceptor.ActionFileUploadInterceptor</code>
-interceptors are included as part of the <code class="language-plaintext
highlighter-rouge">defaultStack</code> and named appropriately: <code
class="language-plaintext highlighter-rouge">fileUpload</code> and <code
class="language-plaintext highlighter-rouge">actionFileUpload</code>.
-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.</p>
+<p>The <code class="language-plaintext
highlighter-rouge">org.apache.struts2.interceptor.ActionFileUploadInterceptor</code>
interceptor is included as part of the <code class="language-plaintext
highlighter-rouge">defaultStack</code>
+and named <code class="language-plaintext
highlighter-rouge">actionFileUpload</code>. 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.</p>
<h3 id="example-action-mapping">Example action mapping:</h3>
@@ -250,71 +243,6 @@ information and content of uploaded file. Your action
should implement the inter
<span class="o">}</span>
</code></pre></div></div>
-<p><strong>Deprecated approach</strong>: the fileUpload interceptor will use
setter injection to insert the uploaded file and related data into your Action
-class. For a form field named <code class="language-plaintext
highlighter-rouge">upload</code> you would provide the three setter methods
shown in the following example:</p>
-
-<h3 id="example-action-class">Example Action class:</h3>
-
-<div class="language-java highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="kn">package</span> <span
class="nn">com.example</span><span class="o">;</span>
-
-<span class="kn">import</span> <span class="nn">java.io.File</span><span
class="o">;</span>
-
-<span class="kn">import</span> <span
class="nn">com.opensymphony.xwork2.ActionSupport</span><span class="o">;</span>
-
-<span class="kd">public</span> <span class="kd">class</span> <span
class="nc">UploadAction</span> <span class="kd">extends</span> <span
class="nc">ActionSupport</span> <span class="o">{</span>
- <span class="kd">private</span> <span class="nc">File</span> <span
class="n">file</span><span class="o">;</span>
- <span class="kd">private</span> <span class="nc">String</span> <span
class="n">contentType</span><span class="o">;</span>
- <span class="kd">private</span> <span class="nc">String</span> <span
class="n">filename</span><span class="o">;</span>
-
- <span class="nd">@StrutsParameter</span>
- <span class="kd">public</span> <span class="kt">void</span> <span
class="nf">setUpload</span><span class="o">(</span><span class="nc">File</span>
<span class="n">file</span><span class="o">)</span> <span class="o">{</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">file</span> <span class="o">=</span> <span
class="n">file</span><span class="o">;</span>
- <span class="o">}</span>
-
- <span class="nd">@StrutsParameter</span>
- <span class="kd">public</span> <span class="kt">void</span> <span
class="nf">setUploadContentType</span><span class="o">(</span><span
class="nc">String</span> <span class="n">contentType</span><span
class="o">)</span> <span class="o">{</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">contentType</span> <span class="o">=</span> <span
class="n">contentType</span><span class="o">;</span>
- <span class="o">}</span>
-
- <span class="nd">@StrutsParameter</span>
- <span class="kd">public</span> <span class="kt">void</span> <span
class="nf">setUploadFileName</span><span class="o">(</span><span
class="nc">String</span> <span class="n">filename</span><span
class="o">)</span> <span class="o">{</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">filename</span> <span class="o">=</span> <span
class="n">filename</span><span class="o">;</span>
- <span class="o">}</span>
-
- <span class="kd">public</span> <span class="nc">String</span> <span
class="nf">execute</span><span class="o">()</span> <span class="o">{</span>
- <span class="c1">//...</span>
- <span class="k">return</span> <span class="no">SUCCESS</span><span
class="o">;</span>
- <span class="o">}</span>
-<span class="o">}</span>
-</code></pre></div></div>
-
-<p>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.</p>
-
-<table>
- <thead>
- <tr>
- <th>Method Signature</th>
- <th>Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code class="language-plaintext highlighter-rouge">setX(File
file)</code></td>
- <td>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</td>
- </tr>
- <tr>
- <td><code class="language-plaintext
highlighter-rouge">setXContentType(String contentType)</code></td>
- <td>The mime type of the uploaded file</td>
- </tr>
- <tr>
- <td><code class="language-plaintext
highlighter-rouge">setXFileName(String fileName)</code></td>
- <td>The actual file name of the uploaded file (not the HTML name)</td>
- </tr>
- </tbody>
-</table>
-
<h2 id="uploading-multiple-files">Uploading Multiple Files</h2>
<p>As mentioned in the previous section one technique for uploading multiple
files would be to simply have multiple form
@@ -336,128 +264,8 @@ see <code class="language-plaintext
highlighter-rouge">struts-fileupload.xml</co
<span class="nt"></s:form></span>
</code></pre></div></div>
-<p>The <code class="language-plaintext
highlighter-rouge">org.apache.struts2.action.UploadedFilesAware</code>
interface already supports uploading multiple files, you do not need to
-follow the below example.</p>
-
-<p><strong>Deprecated approach</strong>: <code class="language-plaintext
highlighter-rouge">MultipleFileUploadUsingArrayAction.java</code></p>
-
-<div class="language-java highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="kd">public</span> <span
class="kd">class</span> <span
class="nc">MultipleFileUploadUsingArrayAction</span> <span
class="kd">extends</span> <span class="nc">ActionSupport</span> <span
class="o">{</span>
- <span class="kd">private</span> <span class="nc">File</span><span
class="o">[]</span> <span class="n">uploads</span><span class="o">;</span>
- <span class="kd">private</span> <span class="nc">String</span><span
class="o">[]</span> <span class="n">uploadFileNames</span><span
class="o">;</span>
- <span class="kd">private</span> <span class="nc">String</span><span
class="o">[]</span> <span class="n">uploadContentTypes</span><span
class="o">;</span>
-
- <span class="kd">public</span> <span class="nc">String</span> <span
class="nf">upload</span><span class="o">()</span> <span
class="kd">throws</span> <span class="nc">Exception</span> <span
class="o">{</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span class="s">"\n\n
upload2"</span><span class="o">);</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span
class="s">"files:"</span><span class="o">);</span>
- <span class="k">for</span> <span class="o">(</span><span
class="nc">File</span> <span class="n">u</span> <span class="o">:</span> <span
class="n">uploads</span><span class="o">)</span> <span class="o">{</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span class="s">"*** "</span>
<span class="o">+</span> <span class="n">u</span> <span class="o">+</span>
<span class="s">"\t"</span> <span class="o">+</span> <span
class="n">u</span><span class="o">.</span><span class="na">length</span><span
class="o">());</span>
- <span class="o">}</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span
class="s">"filenames:"</span><span class="o">);</span>
- <span class="k">for</span> <span class="o">(</span><span
class="nc">String</span> <span class="n">n</span> <span class="o">:</span>
<span class="n">uploadFileNames</span><span class="o">)</span> <span
class="o">{</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span class="s">"*** "</span>
<span class="o">+</span> <span class="n">n</span><span class="o">);</span>
- <span class="o">}</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span class="s">"content
types:"</span><span class="o">);</span>
- <span class="k">for</span> <span class="o">(</span><span
class="nc">String</span> <span class="n">c</span> <span class="o">:</span>
<span class="n">uploadContentTypes</span><span class="o">)</span> <span
class="o">{</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span class="s">"*** "</span>
<span class="o">+</span> <span class="n">c</span><span class="o">);</span>
- <span class="o">}</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span
class="s">"\n\n"</span><span class="o">);</span>
- <span class="k">return</span> <span class="no">SUCCESS</span><span
class="o">;</span>
- <span class="o">}</span>
-
- <span class="kd">public</span> <span class="nc">File</span><span
class="o">[]</span> <span class="nf">getUpload</span><span class="o">()</span>
<span class="o">{</span>
- <span class="k">return</span> <span class="k">this</span><span
class="o">.</span><span class="na">uploads</span><span class="o">;</span>
- <span class="o">}</span>
-
- <span class="nd">@StrutsParameter</span>
- <span class="kd">public</span> <span class="kt">void</span> <span
class="nf">setUpload</span><span class="o">(</span><span
class="nc">File</span><span class="o">[]</span> <span
class="n">upload</span><span class="o">)</span> <span class="o">{</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">uploads</span> <span class="o">=</span> <span
class="n">upload</span><span class="o">;</span>
- <span class="o">}</span>
-
- <span class="kd">public</span> <span class="nc">String</span><span
class="o">[]</span> <span class="nf">getUploadFileName</span><span
class="o">()</span> <span class="o">{</span>
- <span class="k">return</span> <span class="k">this</span><span
class="o">.</span><span class="na">uploadFileNames</span><span
class="o">;</span>
- <span class="o">}</span>
-
- <span class="nd">@StrutsParameter</span>
- <span class="kd">public</span> <span class="kt">void</span> <span
class="nf">setUploadFileName</span><span class="o">(</span><span
class="nc">String</span><span class="o">[]</span> <span
class="n">uploadFileName</span><span class="o">)</span> <span class="o">{</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">uploadFileNames</span> <span class="o">=</span> <span
class="n">uploadFileName</span><span class="o">;</span>
- <span class="o">}</span>
-
- <span class="kd">public</span> <span class="nc">String</span><span
class="o">[]</span> <span class="nf">getUploadContentType</span><span
class="o">()</span> <span class="o">{</span>
- <span class="k">return</span> <span class="k">this</span><span
class="o">.</span><span class="na">uploadContentTypes</span><span
class="o">;</span>
- <span class="o">}</span>
-
- <span class="nd">@StrutsParameter</span>
- <span class="kd">public</span> <span class="kt">void</span> <span
class="nf">setUploadContentType</span><span class="o">(</span><span
class="nc">String</span><span class="o">[]</span> <span
class="n">uploadContentType</span><span class="o">)</span> <span
class="o">{</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">uploadContentTypes</span> <span class="o">=</span> <span
class="n">uploadContentType</span><span class="o">;</span>
- <span class="o">}</span>
-<span class="o">}</span>
-</code></pre></div></div>
-
-<h3 id="uploading-multiple-files-using-lists">Uploading Multiple Files using
Lists</h3>
-
-<p><code class="language-plaintext
highlighter-rouge">multipleUploadUsingList.jsp</code> Notice all file input
types have the same name.</p>
-
-<div class="language-html highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="nt"><s:form</span> <span
class="na">action=</span><span class="s">"doMultipleUploadUsingList"</span>
<span class="na">method=</span><span class="s">"POST"</span> <span
class="na">enctype=</span><span class="s">"multipart/form-data"</span><span
class="nt">></span>
- <span class="nt"><s:file</span> <span class="na">label=</span><span
class="s">"File (1)"</span> <span class="na">name=</span><span
class="s">"upload"</span><span class="nt">/></span>
- <span class="nt"><s:file</span> <span class="na">label=</span><span
class="s">"File (2)"</span> <span class="na">name=</span><span
class="s">"upload"</span><span class="nt">/></span>
- <span class="nt"><s:file</span> <span class="na">label=</span><span
class="s">"FIle (3)"</span> <span class="na">name=</span><span
class="s">"upload"</span><span class="nt">/></span>
- <span class="nt"><s:submit</span> <span
class="na">cssClass=</span><span class="s">"btn btn-primary"</span><span
class="nt">/></span>
-<span class="nt"></s:form></span>
-</code></pre></div></div>
-
-<p><code class="language-plaintext
highlighter-rouge">MultipleFileUploadUsingListAction.java</code></p>
-
-<div class="language-java highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="kd">public</span> <span
class="kd">class</span> <span
class="nc">MultipleFileUploadUsingListAction</span> <span
class="kd">extends</span> <span class="nc">ActionSupport</span> <span
class="o">{</span>
- <span class="kd">private</span> <span class="nc">List</span><span
class="o"><</span><span class="nc">File</span><span class="o">></span>
<span class="n">uploads</span> <span class="o">=</span> <span
class="k">new</span> <span class="nc">ArrayList</span><span
class="o"><</span><span class="nc">File</span><span class="o">>();</span>
- <span class="kd">private</span> <span class="nc">List</span><span
class="o"><</span><span class="nc">String</span><span class="o">></span>
<span class="n">uploadFileNames</span> <span class="o">=</span> <span
class="k">new</span> <span class="nc">ArrayList</span><span
class="o"><</span><span class="nc">String</span><span
class="o">>();</span>
- <span class="kd">private</span> <span class="nc">List</span><span
class="o"><</span><span class="nc">String</span><span class="o">></span>
<span class="n">uploadContentTypes</span> <span class="o">=</span> <span
class="k">new</span> <span class="nc">ArrayList</span><span
class="o"><</span><span class="nc">String</span><span
class="o">>();</span>
-
- <span class="kd">public</span> <span class="nc">List</span><span
class="o"><</span><span class="nc">File</span><span class="o">></span>
<span class="nf">getUpload</span><span class="o">()</span> <span
class="o">{</span>
- <span class="k">return</span> <span class="k">this</span><span
class="o">.</span><span class="na">uploads</span><span class="o">;</span>
- <span class="o">}</span>
-
- <span class="nd">@StrutsParameter</span>
- <span class="kd">public</span> <span class="kt">void</span> <span
class="nf">setUpload</span><span class="o">(</span><span
class="nc">List</span><span class="o"><</span><span
class="nc">File</span><span class="o">></span> <span
class="n">uploads</span><span class="o">)</span> <span class="o">{</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">uploads</span> <span class="o">=</span> <span
class="n">uploads</span><span class="o">;</span>
- <span class="o">}</span>
-
- <span class="kd">public</span> <span class="nc">List</span><span
class="o"><</span><span class="nc">String</span><span class="o">></span>
<span class="nf">getUploadFileName</span><span class="o">()</span> <span
class="o">{</span>
- <span class="k">return</span> <span class="k">this</span><span
class="o">.</span><span class="na">uploadFileNames</span><span
class="o">;</span>
- <span class="o">}</span>
-
- <span class="nd">@StrutsParameter</span>
- <span class="kd">public</span> <span class="kt">void</span> <span
class="nf">setUploadFileName</span><span class="o">(</span><span
class="nc">List</span><span class="o"><</span><span
class="nc">String</span><span class="o">></span> <span
class="n">uploadFileNames</span><span class="o">)</span> <span
class="o">{</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">uploadFileNames</span> <span class="o">=</span> <span
class="n">uploadFileNames</span><span class="o">;</span>
- <span class="o">}</span>
-
- <span class="kd">public</span> <span class="nc">List</span><span
class="o"><</span><span class="nc">String</span><span class="o">></span>
<span class="nf">getUploadContentType</span><span class="o">()</span> <span
class="o">{</span>
- <span class="k">return</span> <span class="k">this</span><span
class="o">.</span><span class="na">uploadContentTypes</span><span
class="o">;</span>
- <span class="o">}</span>
-
- <span class="nd">@StrutsParameter</span>
- <span class="kd">public</span> <span class="kt">void</span> <span
class="nf">setUploadContentType</span><span class="o">(</span><span
class="nc">List</span><span class="o"><</span><span
class="nc">String</span><span class="o">></span> <span
class="n">contentTypes</span><span class="o">)</span> <span class="o">{</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">uploadContentTypes</span> <span class="o">=</span> <span
class="n">contentTypes</span><span class="o">;</span>
- <span class="o">}</span>
-
- <span class="kd">public</span> <span class="nc">String</span> <span
class="nf">upload</span><span class="o">()</span> <span
class="kd">throws</span> <span class="nc">Exception</span> <span
class="o">{</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span class="s">"\n\n
upload1"</span><span class="o">);</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span
class="s">"files:"</span><span class="o">);</span>
- <span class="k">for</span> <span class="o">(</span><span
class="nc">File</span> <span class="n">u</span> <span class="o">:</span> <span
class="n">uploads</span><span class="o">)</span> <span class="o">{</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span class="s">"*** "</span>
<span class="o">+</span> <span class="n">u</span> <span class="o">+</span>
<span class="s">"\t"</span> <span class="o">+</span> <span
class="n">u</span><span class="o">.</span><span class="na">length</span><span
class="o">());</span>
- <span class="o">}</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span
class="s">"filenames:"</span><span class="o">);</span>
- <span class="k">for</span> <span class="o">(</span><span
class="nc">String</span> <span class="n">n</span> <span class="o">:</span>
<span class="n">uploadFileNames</span><span class="o">)</span> <span
class="o">{</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span class="s">"*** "</span>
<span class="o">+</span> <span class="n">n</span><span class="o">);</span>
- <span class="o">}</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span class="s">"content
types:"</span><span class="o">);</span>
- <span class="k">for</span> <span class="o">(</span><span
class="nc">String</span> <span class="n">c</span> <span class="o">:</span>
<span class="n">uploadContentTypes</span><span class="o">)</span> <span
class="o">{</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span class="s">"*** "</span>
<span class="o">+</span> <span class="n">c</span><span class="o">);</span>
- <span class="o">}</span>
- <span class="nc">System</span><span class="o">.</span><span
class="na">out</span><span class="o">.</span><span
class="na">println</span><span class="o">(</span><span
class="s">"\n\n"</span><span class="o">);</span>
- <span class="k">return</span> <span class="no">SUCCESS</span><span
class="o">;</span>
- <span class="o">}</span>
-<span class="o">}</span>
-</code></pre></div></div>
+<p>The <code class="language-plaintext
highlighter-rouge">org.apache.struts2.action.UploadedFilesAware</code>
interface already supports uploading multiple files, you do not need
+to follow the below example.</p>
<h2 id="advanced-configuration">Advanced Configuration</h2>
@@ -506,6 +314,7 @@ a file that is too large. Note that the aforementioned
settings are applied at t
precedence over this interceptor setting.</p>
<p>Notice the locations of these settings in the following example:</p>
+
<div class="language-xml highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="nt"><struts></span>
<span class="nt"><constant</span> <span class="na">name=</span><span
class="s">"struts.multipart.maxSize"</span> <span class="na">value=</span><span
class="s">"1000000"</span><span class="nt">/></span>
<span class="nt"><constant</span> <span class="na">name=</span><span
class="s">"struts.multipart.maxFileSize"</span> <span
class="na">value=</span><span class="s">"750000"</span><span
class="nt">/></span>
@@ -522,10 +331,11 @@ precedence over this interceptor setting.</p>
<span class="nt"></action></span>
<span class="nt"></struts></span>
</code></pre></div></div>
+
<h3 id="normal-field-size-limit">Normal Field Size Limit</h3>
<p>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:</p>
+The default limit is set to 4096 bytes:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre
class="highlight"><code>struts.multipart.maxStringLength=4096
</code></pre></div></div>
@@ -653,10 +463,8 @@ follow:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre
class="highlight"><code>^multipart/form-data(?:\\s*;\\s*boundary=[0-9a-zA-Z'()+_,\\-./:=?]{1,70})?(?:\\s*;\\s*charset=[a-zA-Z\\-0-9]{3,14})?
</code></pre></div></div>
-<p>Please read <a
href="https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html">RFC1341</a> the
<strong>Multipart section</strong> for more
-details,
-existing Struts <code class="language-plaintext
highlighter-rouge">Multipart</code> parsers support only <code
class="language-plaintext highlighter-rouge">multipart/form-data</code> content
type. This option is available since
-Struts 2.3.11.</p>
+<p>Please read <a
href="https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html">RFC1341</a> the
<strong>Multipart section</strong> for more details, existing Struts <code
class="language-plaintext highlighter-rouge">Multipart</code> parsers support
+only <code class="language-plaintext
highlighter-rouge">multipart/form-data</code> content type. This option is
available since Struts 2.3.11.</p>
<h3 id="disabling-file-upload-support">Disabling file upload support</h3>
diff --git a/content/core-developers/file-upload.html
b/content/core-developers/file-upload.html
index b3e1253f5..13d33aa54 100644
--- a/content/core-developers/file-upload.html
+++ b/content/core-developers/file-upload.html
@@ -148,7 +148,7 @@
<section class="col-md-12">
<a class="edit-on-gh"
href="https://github.com/apache/struts-site/edit/master/source/core-developers/file-upload.md"
title="Edit this page on GitHub">Edit on GitHub</a>
- <a href="action-file-upload-interceptor" title="back to Action File Upload
Interceptor"><< back to Action File Upload Interceptor</a>
+ <a href="file-upload-interceptor" title="back to File Upload
Interceptor"><< back to File Upload Interceptor</a>
<h1 class="no_toc" id="file-upload">File Upload</h1>
@@ -179,6 +179,8 @@
</li>
</ul>
+<p class="alert alert-block alert-error">Since Struts 6.4.0 the <code
class="language-plaintext highlighter-rouge">FileUploadInterceptor</code> is
deprecated, and you should use <a
href="action-file-upload-interceptor">ActionFileUploadInterceptor</a>
instead!</p>
+
<p>The Struts 2 framework provides built-in support for processing file
uploads that conform to <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC
1867</a>,
“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
@@ -191,16 +193,11 @@ than the temporary directory and the directories that
belong to your web applica
<p>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.</p>
-<blockquote>
- <p>NOTE: Since Struts 6.4.0 the <code class="language-plaintext
highlighter-rouge">FileUploadInterceptor</code> is deprecated, and you should
use <code class="language-plaintext
highlighter-rouge">ActionFileUploadInterceptor</code> instead!</p>
-</blockquote>
-
<h2 id="basic-usage">Basic Usage</h2>
-<p>The <code class="language-plaintext
highlighter-rouge">org.apache.struts2.interceptor.FileUploadInterceptor</code>
and <code class="language-plaintext
highlighter-rouge">org.apache.struts2.interceptor.ActionFileUploadInterceptor</code>
-interceptors are included as part of the <code class="language-plaintext
highlighter-rouge">defaultStack</code> and named appropriately: <code
class="language-plaintext highlighter-rouge">fileUpload</code> and <code
class="language-plaintext highlighter-rouge">actionFileUpload</code>.
-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.</p>
+<p>The <code class="language-plaintext
highlighter-rouge">org.apache.struts2.interceptor.FileUploadInterceptor</code>
interceptor is included as part of the <code class="language-plaintext
highlighter-rouge">defaultStack</code>
+and named <code class="language-plaintext
highlighter-rouge">fileUpload</code>. 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.</p>
<h3 id="example-action-mapping">Example action mapping:</h3>
@@ -223,34 +220,7 @@ example:</p>
<span class="nt"></s:form></span>
</code></pre></div></div>
-<p>The actionFileUpload interceptor will use a dedicated interface <code
class="language-plaintext
highlighter-rouge">org.apache.struts2.action.UploadedFilesAware</code> to
transfer
-information and content of uploaded file. Your action should implement the
interface to receive the uploaded file:</p>
-
-<div class="language-java highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="kd">public</span> <span
class="kd">class</span> <span class="nc">UploadAction</span> <span
class="kd">extends</span> <span class="nc">ActionSupport</span> <span
class="kd">implements</span> <span class="nc">UploadedFilesAware</span> <span
class="o">{</span>
-
- <span class="kd">private</span> <span class="nc">UploadedFile</span> <span
class="n">uploadedFile</span><span class="o">;</span>
- <span class="kd">private</span> <span class="nc">String</span> <span
class="n">contentType</span><span class="o">;</span>
- <span class="kd">private</span> <span class="nc">String</span> <span
class="n">fileName</span><span class="o">;</span>
- <span class="kd">private</span> <span class="nc">String</span> <span
class="n">originalName</span><span class="o">;</span>
-
- <span class="nd">@Override</span>
- <span class="kd">public</span> <span class="kt">void</span> <span
class="nf">withUploadedFiles</span><span class="o">(</span><span
class="nc">List</span><span class="o"><</span><span
class="nc">UploadedFile</span><span class="o">></span> <span
class="n">uploadedFiles</span><span class="o">)</span> <span class="o">{</span>
- <span class="k">if</span> <span class="o">(!</span><span
class="n">uploadedFiles</span><span class="o">.</span><span
class="na">isEmpty</span><span class="o">())</span> <span class="o">{</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">uploadedFile</span> <span class="o">=</span> <span
class="n">uploadedFiles</span><span class="o">.</span><span
class="na">get</span><span class="o">(</span><span class="mi">0</span><span
class="o">);</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">fileName</span> <span class="o">=</span> <span
class="n">uploadedFile</span><span class="o">.</span><span
class="na">getName</span><span class="o">();</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">contentType</span> <span class="o">=</span> <span
class="n">uploadedFile</span><span class="o">.</span><span
class="na">getContentType</span><span class="o">();</span>
- <span class="k">this</span><span class="o">.</span><span
class="na">originalName</span> <span class="o">=</span> <span
class="n">uploadedFile</span><span class="o">.</span><span
class="na">getOriginalName</span><span class="o">();</span>
- <span class="o">}</span>
- <span class="o">}</span>
-
- <span class="kd">public</span> <span class="nc">String</span> <span
class="nf">execute</span><span class="o">()</span> <span class="o">{</span>
- <span class="c1">// do something with the file</span>
- <span class="k">return</span> <span class="no">SUCCESS</span><span
class="o">;</span>
- <span class="o">}</span>
-<span class="o">}</span>
-</code></pre></div></div>
-
-<p><strong>Deprecated approach</strong>: the fileUpload interceptor will use
setter injection to insert the uploaded file and related data into your Action
+<p>The <strong>fileUpload</strong> interceptor will use setter injection to
insert the uploaded file and related data into your Action
class. For a form field named <code class="language-plaintext
highlighter-rouge">upload</code> you would provide the three setter methods
shown in the following example:</p>
<h3 id="example-action-class">Example Action class:</h3>
@@ -336,10 +306,7 @@ see <code class="language-plaintext
highlighter-rouge">struts-fileupload.xml</co
<span class="nt"></s:form></span>
</code></pre></div></div>
-<p>The <code class="language-plaintext
highlighter-rouge">org.apache.struts2.action.UploadedFilesAware</code>
interface already supports uploading multiple files, you do not need to
-follow the below example.</p>
-
-<p><strong>Deprecated approach</strong>: <code class="language-plaintext
highlighter-rouge">MultipleFileUploadUsingArrayAction.java</code></p>
+<p><strong>MultipleFileUploadUsingArrayAction.java</strong></p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="kd">public</span> <span
class="kd">class</span> <span
class="nc">MultipleFileUploadUsingArrayAction</span> <span
class="kd">extends</span> <span class="nc">ActionSupport</span> <span
class="o">{</span>
<span class="kd">private</span> <span class="nc">File</span><span
class="o">[]</span> <span class="n">uploads</span><span class="o">;</span>
@@ -522,6 +489,7 @@ precedence over this interceptor setting.</p>
<span class="nt"></action></span>
<span class="nt"></struts></span>
</code></pre></div></div>
+
<h3 id="normal-field-size-limit">Normal Field Size Limit</h3>
<p>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.