<?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>
        Since version <b>1.3</b>, FileUpload is able to handle RFC2047 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> - 12 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>
