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 <bui...@apache.org> 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.