You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by jo...@apache.org on 2006/06/19 03:42:12 UTC

svn commit: r415229 - in /jakarta/commons/proper/fileupload/branches/streaming: ./ .settings/ src/java/org/apache/commons/fileupload/ src/java/org/apache/commons/fileupload/portlet/ src/java/org/apache/commons/fileupload/servlet/ src/test/org/apache/co...

Author: jochen
Date: Sun Jun 18 18:42:11 2006
New Revision: 415229

URL: http://svn.apache.org/viewvc?rev=415229&view=rev
Log:
Added docs and some convenience methods for the streaming API.

Added:
    jakarta/commons/proper/fileupload/branches/streaming/xdocs/streaming.xml
Modified:
    jakarta/commons/proper/fileupload/branches/streaming/.settings/org.eclipse.jdt.core.prefs
    jakarta/commons/proper/fileupload/branches/streaming/project.properties
    jakarta/commons/proper/fileupload/branches/streaming/project.xml
    jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileItemIterator.java
    jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileItemStream.java
    jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileUpload.java
    jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileUploadBase.java
    jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/StreamUtil.java
    jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/portlet/PortletFileUpload.java
    jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/servlet/ServletFileUpload.java
    jakarta/commons/proper/fileupload/branches/streaming/src/test/org/apache/commons/fileupload/DiskFileItemSerializeTest.java
    jakarta/commons/proper/fileupload/branches/streaming/xdocs/changes.xml
    jakarta/commons/proper/fileupload/branches/streaming/xdocs/index.xml
    jakarta/commons/proper/fileupload/branches/streaming/xdocs/navigation.xml
    jakarta/commons/proper/fileupload/branches/streaming/xdocs/using.xml

Modified: jakarta/commons/proper/fileupload/branches/streaming/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/.settings/org.eclipse.jdt.core.prefs?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/.settings/org.eclipse.jdt.core.prefs (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/.settings/org.eclipse.jdt.core.prefs Sun Jun 18 18:42:11 2006
@@ -1,4 +1,4 @@
-#Sun Jun 18 22:37:19 CEST 2006
+#Mon Jun 19 03:18:34 CEST 2006
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.1
@@ -11,7 +11,7 @@
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
-org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private

Modified: jakarta/commons/proper/fileupload/branches/streaming/project.properties
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/project.properties?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/project.properties (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/project.properties Sun Jun 18 18:42:11 2006
@@ -44,7 +44,7 @@
 
 maven.changelog.type=date
 #maven.changelog.date=lastRelease
-maven.changelog.date=2005-12-24
+maven.changelog.date=2006-06-08
 
 # documentation properties
 maven.xdoc.date=left

Modified: jakarta/commons/proper/fileupload/branches/streaming/project.xml
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/project.xml?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/project.xml (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/project.xml Sun Jun 18 18:42:11 2006
@@ -21,7 +21,7 @@
   <name>FileUpload</name>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
-  <currentVersion>1.1.1</currentVersion>
+  <currentVersion>1.2-SNAPSHOT</currentVersion>
   <inceptionYear>2002</inceptionYear>
   <shortDescription>File upload component for Java servlets</shortDescription>
   <description>

Modified: jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileItemIterator.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileItemIterator.java?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileItemIterator.java (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileItemIterator.java Sun Jun 18 18:42:11 2006
@@ -15,10 +15,12 @@
  */
 package org.apache.commons.fileupload;
 
+import java.util.NoSuchElementException;
+
 
 /** 
  * An iterator, as returned by
- * {@link FileUploadBase#getItemRequest(RequestContext)}
+ * {@link FileUploadBase#getItemIterator(RequestContext)}
  */
 public interface FileItemIterator {
     /** 

Modified: jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileItemStream.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileItemStream.java?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileItemStream.java (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileItemStream.java Sun Jun 18 18:42:11 2006
@@ -26,7 +26,7 @@
  * The items contents are retrieved by calling {@link #openStream()}.</p>
  * <p>Instances of this class are created by accessing the
  * iterator, returned by
- * {@link FileUploadBase#getRequestIterator(RequestContext)}.</p>
+ * {@link FileUploadBase#getItemIterator(RequestContext)}.</p>
  * <em>Note</em>: There is an interaction between the iterator and
  * its associated instances of {@link FileItemStream}: By invoking
  * {@link Iterator#hasNext()} on the iterator, you discard all data,

Modified: jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileUpload.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileUpload.java?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileUpload.java (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileUpload.java Sun Jun 18 18:42:11 2006
@@ -15,6 +15,8 @@
  */
 package org.apache.commons.fileupload;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * <p>High level API for processing file uploads.</p>
  *

Modified: jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileUploadBase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileUploadBase.java?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileUploadBase.java (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/FileUploadBase.java Sun Jun 18 18:42:11 2006
@@ -18,11 +18,9 @@
 import java.io.FilterInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
@@ -285,7 +283,7 @@
      * @throws FileUploadException if there are problems reading/parsing
      *                             the request or storing files.
      */
-    public FileItemIterator getItemRequest(RequestContext ctx)
+    public FileItemIterator getItemIterator(RequestContext ctx)
             throws FileUploadException {
         return new FileItemIteratorImpl(ctx);
     }
@@ -304,7 +302,7 @@
      */
     public List /* FileItem */ parseRequest(RequestContext ctx)
             throws FileUploadException {
-        FileItemIterator iter = getItemRequest(ctx);
+        FileItemIterator iter = getItemIterator(ctx);
         List items = new ArrayList();
         FileItemFactory fac = getFileItemFactory();
         final byte[] buffer = new byte[8192];
@@ -497,7 +495,7 @@
 
     /**
      * The iterator, which is returned by
-     * {@link FileUploadBase#getRequestIterator(RequestContext)}.
+     * {@link FileUploadBase#getItemIterator(RequestContext)}.
      */
     private class FileItemIteratorImpl implements FileItemIterator {
         private class FileItemStreamImpl implements FileItemStream {
@@ -773,6 +771,8 @@
      */
     public static class InvalidContentTypeException
         extends FileUploadException {
+        private static final long serialVersionUID = -9073026332015646668L;
+
         /**
          * Constructs a <code>InvalidContentTypeException</code> with no
          * detail message.
@@ -798,6 +798,8 @@
      */
     public static class SizeLimitExceededException
         extends FileUploadException {
+        private static final long serialVersionUID = -2474893167098052828L;
+
         /**
          * The actual size of the request.
          */

Modified: jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/StreamUtil.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/StreamUtil.java?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/StreamUtil.java (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/StreamUtil.java Sun Jun 18 18:42:11 2006
@@ -1,5 +1,6 @@
 package org.apache.commons.fileupload;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -96,5 +97,32 @@
                 }
             }
         }
+    }
+
+    /**
+     * This convenience method allows to read a {@link FileItemStream}'s
+     * content into a string. The platform's default character encoding
+     * is used for converting bytes into characters.
+     * @param pStream The input stream to read.
+     * @see #asString(InputStream, String)
+     */
+    public String asString(InputStream pStream) throws IOException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        copy(pStream, baos, true);
+        return baos.toString();
+    }
+
+    /**
+     * This convenience method allows to read a {@link FileItemStream}'s
+     * content into a string, using the given character encoding.
+     * @param pStream The input stream to read.
+     * @param pEncoding The character encoding, typically "UTF-8".
+     * @see #asString(InputStream)
+     */
+    public String asString(InputStream pStream, String pEncoding)
+            throws IOException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        copy(pStream, baos, true);
+        return baos.toString(pEncoding);
     }
 }

Modified: jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/portlet/PortletFileUpload.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/portlet/PortletFileUpload.java?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/portlet/PortletFileUpload.java (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/portlet/PortletFileUpload.java Sun Jun 18 18:42:11 2006
@@ -16,8 +16,12 @@
 package org.apache.commons.fileupload.portlet;
 
 import java.util.List;
+
 import javax.portlet.ActionRequest;
+import javax.servlet.http.HttpServletRequest;
+
 import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.FileItemIterator;
 import org.apache.commons.fileupload.FileUpload;
 import org.apache.commons.fileupload.FileUploadBase;
 import org.apache.commons.fileupload.FileUploadException;
@@ -111,5 +115,22 @@
     public List /* FileItem */ parseRequest(ActionRequest request)
             throws FileUploadException {
         return parseRequest(new PortletRequestContext(request));
+    }
+
+    /**
+     * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
+     * compliant <code>multipart/form-data</code> stream.
+     *
+     * @param request The portlet request to be parsed.
+     *
+     * @return An iterator to instances of <code>FileItemStream</code>
+     *         parsed from the request, in the order that they were
+     *         transmitted.
+     *
+     * @throws FileUploadException if there are problems reading/parsing
+     *                             the request or storing files.
+     */
+    public FileItemIterator getItemIterator(ActionRequest request) throws FileUploadException {
+        return super.getItemIterator(new PortletRequestContext(request));
     }
 }

Modified: jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/servlet/ServletFileUpload.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/servlet/ServletFileUpload.java?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/servlet/ServletFileUpload.java (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/src/java/org/apache/commons/fileupload/servlet/ServletFileUpload.java Sun Jun 18 18:42:11 2006
@@ -16,8 +16,11 @@
 package org.apache.commons.fileupload.servlet;
 
 import java.util.List;
+
 import javax.servlet.http.HttpServletRequest;
+
 import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.FileItemIterator;
 import org.apache.commons.fileupload.FileUpload;
 import org.apache.commons.fileupload.FileUploadException;
 
@@ -114,5 +117,23 @@
     public List /* FileItem */ parseRequest(HttpServletRequest request)
             throws FileUploadException {
         return parseRequest(new ServletRequestContext(request));
+    }
+
+
+    /**
+     * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
+     * compliant <code>multipart/form-data</code> stream.
+     *
+     * @param request The servlet request to be parsed.
+     *
+     * @return An iterator to instances of <code>FileItemStream</code>
+     *         parsed from the request, in the order that they were
+     *         transmitted.
+     *
+     * @throws FileUploadException if there are problems reading/parsing
+     *                             the request or storing files.
+     */
+    public FileItemIterator getItemIterator(HttpServletRequest request) throws FileUploadException {
+        return super.getItemIterator(new ServletRequestContext(request));
     }
 }

Modified: jakarta/commons/proper/fileupload/branches/streaming/src/test/org/apache/commons/fileupload/DiskFileItemSerializeTest.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/src/test/org/apache/commons/fileupload/DiskFileItemSerializeTest.java?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/src/test/org/apache/commons/fileupload/DiskFileItemSerializeTest.java (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/src/test/org/apache/commons/fileupload/DiskFileItemSerializeTest.java Sun Jun 18 18:42:11 2006
@@ -31,7 +31,7 @@
 
 /**
  * Serialization Unit tests for 
- *  {@link org.apache.commons.fileupload.disk.DiskFileItemTest}.
+ *  {@link org.apache.commons.fileupload.disk.DiskFileItem}.
  */
 public class DiskFileItemSerializeTest extends TestCase
  {

Modified: jakarta/commons/proper/fileupload/branches/streaming/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/xdocs/changes.xml?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/xdocs/changes.xml (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/xdocs/changes.xml Sun Jun 18 18:42:11 2006
@@ -45,6 +45,12 @@
 	  <action dev="jochen" type="update" issue="FILEUPLOAD-109">
 	    Eliminated duplicate code.
 	  </action>
+	  <action dev="jochen" type="add" issue="FILEUPLOAD-112">
+	    Added a streaming API.
+	  </action>
+	  <action dev="jochen" type="fix" issue="FILEUPLOAD-93">
+	    Eliminated the necessity of a content-length header.
+	  </action>
 
 	</release>
 

Modified: jakarta/commons/proper/fileupload/branches/streaming/xdocs/index.xml
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/xdocs/index.xml?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/xdocs/index.xml (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/xdocs/index.xml Sun Jun 18 18:42:11 2006
@@ -45,6 +45,7 @@
         The following documentation is available:
         <ul>
           <li><a href="using.html">User Guide</a></li>
+          <li><a href="streaming.html">Streaming API</a></li>
           <li><a href="faq.html">Frequently Asked Questions</a></li>
           <li><a href="apidocs/index.html">JavaDoc API</a></li>
           <li><a href="maven-reports.html">Project Reports</a></li>

Modified: jakarta/commons/proper/fileupload/branches/streaming/xdocs/navigation.xml
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/xdocs/navigation.xml?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/xdocs/navigation.xml (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/xdocs/navigation.xml Sun Jun 18 18:42:11 2006
@@ -31,6 +31,7 @@
     <menu name="Commons FileUpload">
       <item name="Overview"                 href="/index.html"/>
       <item name="User guide"               href="/using.html"/>
+      <item name="Streaming API"            href="/streaming.html"/>
       <!--item name="Customization"            href="/customizing.html"/-->
       <item name="FAQ"                      href="/faq.html"/>
       <item name="Javadoc"                  href="apidocs/index.html"/>

Added: jakarta/commons/proper/fileupload/branches/streaming/xdocs/streaming.xml
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/xdocs/streaming.xml?rev=415229&view=auto
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/xdocs/streaming.xml (added)
+++ jakarta/commons/proper/fileupload/branches/streaming/xdocs/streaming.xml Sun Jun 18 18:42:11 2006
@@ -0,0 +1,87 @@
+<?xml version="1.0"?>
+<!--
+   Copyright 2006 The Apache Software Foundation
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+<document>
+
+  <properties>
+    <title>The Streaming API</title>
+  </properties>
+
+<body>
+
+  <section name="Why Streaming?">
+    <p>
+      The traditional API, which is described in the <a href="using.html">User
+      Guide</a>, assumes, that file items must be stored somewhere, before
+      they are actually accessable by the user. This approach is convenient,
+      because it allows easy access to an items contents. On the other hand,
+      it is memory and time consuming.
+    </p>
+    <p>
+      The streaming API allows you to trade a little bit of convenience for
+      optimal performance and and a low memory profile. Additionally, the
+      API is more lightweight, thus easier to understand.
+    </p>
+  </section>
+
+  <section name="How it works">
+    <p>
+      Again, the <code>FileUpload</code> class is used for accessing the
+      form fields and fields in the order, in which they have been sent
+      by the client. However, the <code>FileItemFactory</code> is completely
+      ignored.
+    </p>
+  </section>
+
+  <section name="Parsing the request">
+    <p>
+      First of all, do not forget to ensure, that a request actually is a
+      a file upload request. This is typically done using the same static
+      method, which you already know from the traditional API.
+    </p>
+<source><![CDATA[// Check that we have a file upload request
+boolean isMultipart = ServletFileUpload.isMultipartContent(request);]]></source>
+    <p>
+      Now we are ready to parse the request into its constituent items. Here's
+      how we do it:
+    </p>
+<source><![CDATA[
+// Create a new file upload handler
+ServletFileUpload upload = new ServletFileUpload();
+
+// Parse the request
+FileItemIterator iter = upload.getItemIterator(request);
+while (iter.hasNext()) {
+    FileItemStream item = iter.next();
+    String name = item.getFieldName();
+    InputStream stream = item.openStream();
+    if (item.isFormField()) {
+        System.out.println("Form field " + name + " with value "
+            + StreamUtil.asString(stream) + " detected.");
+    } else {
+        System.out.println("File field " + name + " with file name "
+            + item.getName() + " detected.");
+        // Process the input stream
+        ...
+    }
+}]]></source>
+    <p>
+      That's all that's needed. Really!
+    </p>
+  </section>
+</body>
+</document>

Modified: jakarta/commons/proper/fileupload/branches/streaming/xdocs/using.xml
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/fileupload/branches/streaming/xdocs/using.xml?rev=415229&r1=415228&r2=415229&view=diff
==============================================================================
--- jakarta/commons/proper/fileupload/branches/streaming/xdocs/using.xml (original)
+++ jakarta/commons/proper/fileupload/branches/streaming/xdocs/using.xml Sun Jun 18 18:42:11 2006
@@ -52,6 +52,12 @@
       regardless of its underlying implementation.
     </p>
     <p>
+      This page describes the traditional API of the commons fileupload
+      library. The traditional API is a convenient approach. However, for
+      ultimate performance, you might prefer the faster
+      <a href="streaming.html">Streaming API</a>.
+    </p>
+    <p>
       Each file item has a number of properties that might be of interest for
       your application. For example, every item has a name and a content type,
       and can provide an <code>InputStream</code> to access its data. On the



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org