<?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</strong> - 27 March 2013</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.2.2</strong> - 29 July 2010</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.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>
