<?xml version="1.0"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You 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 xmlns="http://maven.apache.org/XDOC/2.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">

  <properties>
    <title>Home</title>
    <author email="martinc@apache.org">Martin Cooper</author>
  </properties>

  <body>
    <section name="Commons FileUpload">
      <p>
        The Commons <strong>FileUpload</strong> package makes it easy to add
        robust, high-performance, file upload capability to your servlets and
        web applications.
      </p>
      <p>
        FileUpload parses HTTP requests which conform to
        <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>,
        "Form-based File Upload in HTML". That is, if an HTTP request is
        submitted using the POST method, and with a content type of
        "multipart/form-data", then FileUpload can parse that request, and
        make the results available in a manner easily used by the caller.
      </p>
      <p>
        Starting with version <b>1.3</b>, FileUpload handles 
        <a href="https://www.ietf.org/rfc/rfc2047.txt">RFC 2047</a> encoded header values.
      </p>

      <p>The simplest way to send a <i>multipart/form-data</i> request to a server is via a web form, i.e.</p>
      <source><![CDATA[<form method="POST" enctype="multipart/form-data" action="fup.cgi">
  File to upload: <input type="file" name="upfile"><br/>
  Notes about the file: <input type="text" name="note"><br/>
  <br/>
  <input type="submit" value="Press"> to upload the file!
</form>]]></source>
    </section>

    <section name="Documentation">
      <p>The following documentation is available:</p>
      <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="./project-reports.html">Project Reports</a></li>
      </ul>
      <p>You can also <a href="./source-repository.html">browse</a> the Subversion repository.</p>
    </section>

    <section name="Downloading">
      <subsection name="Full Releases">
        <p><strong>FileUpload 1.3.2</strong> - 26 May 2016</p>
        <ul>
          <li>Download the binary and source distributions from a mirror site
            <a href="http://commons.apache.org/fileupload/download_fileupload.cgi">here</a>
          </li>
        </ul>
        <p><strong>FileUpload 1.3.1</strong> - 7 February 2014</p>
        <ul>
          <li>Download the binary and source distributions from the archive site
            <a href="http://archive.apache.org/dist/commons/fileupload/">here</a>
          </li>
        </ul>
        <p><strong>FileUpload 1.3</strong> - 27 March 2013</p>
        <ul>
          <li>Download the binary and source distributions from the archive site
            <a href="http://archive.apache.org/dist/commons/fileupload/">here</a>
          </li>
        </ul>
        <p><strong>FileUpload 1.2.2</strong> - 29 July 2010</p>
        <ul>
          <li>Download the binary and source distributions from the archive site
            <a href="http://archive.apache.org/dist/commons/fileupload/">here</a>
          </li>
        </ul>
        <p><strong>FileUpload 1.2.1</strong> - 18 January 2008</p>
        <ul>
          <li>Download the binary and source distributions from the archive site
            <a href="http://archive.apache.org/dist/commons/fileupload/">here</a>
          </li>
        </ul>
        <p><strong>FileUpload 1.2</strong> - 13 February 2007</p>
        <ul>
          <li>Download the binary and source distributions from the archive site
            <a href="http://archive.apache.org/dist/commons/fileupload/">here</a>
          </li>
        </ul>
        <p><strong>FileUpload 1.1.1</strong> - 08 June 2006</p>
        <ul>
          <li>Download the binary and source distributions from the archive site
            <a href="http://archive.apache.org/dist/commons/fileupload/">here</a>
          </li>
        </ul>
        <p><strong>FileUpload 1.1</strong> - 22 Dec 2005</p>
        <ul>
          <li>Download the binary and source distributions from the archive site
            <a href="http://archive.apache.org/dist/commons/fileupload/">here</a>
          </li>
        </ul>
        <p><strong>FileUpload 1.0</strong> - 24 Jun 2003</p>
        <ul>
          <li>Download the binary and source distributions from the archive site
            <a href="http://archive.apache.org/dist/commons/fileupload/">here</a>
          </li>
        </ul>
      </subsection>

      <subsection name="Releases Candidates">
        <p>
          None available.
        </p>
      </subsection>
    </section>

    <section name="Support">
      <p>
        The <a href="mail-lists.html">Apache Commons mailing lists</a> act as
        the main support forum. The <em>user</em> list is suitable for most library
        usage queries. The <em>dev</em> list is intended for development discussion.
        Please remember that the lists are shared between all commons components,
        so prefix your e-mail subject line with <em>[fileupload]</em>.
      </p>
      <p>
        Issues may be reported via <a href="issue-tracking.html">ASF JIRA</a>.
      </p>
    </section>
  </body>

</document>
