blob: 60d205c1b01f07b32a98b219eb6d2a5c6db8b601 [file] [log] [blame]
<?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>
<properties>
<title>Upload Component</title>
<author email="epugh@opensourceconnections.com">Eric Pugh</author>
</properties>
<body>
<section name="Overview">
<p>
The Upload Service handles the parsing of multi-part/form-data from
POST Requests for Servlets and Portlets, making the multi-part files available
from either memory or from a specified location on the file system.
</p>
<p>
It is written for use in Turbine but it can be used in Avalon
compatible container.
</p>
</section>
<section name="Configuration">
<subsection name="Role Configuration">
<source><![CDATA[
<role
name="org.apache.fulcrum.upload.UploadService"
shorthand="upload"
default-class="org.apache.fulcrum.upload.DefaultUploadService"/>
]]></source>
</subsection>
<subsection name="Component Configuration">
<table>
<tr>
<th>Item</th>
<th>Datatype</th>
<th>Cardinality</th>
<th>Description</th>
</tr>
<tr>
<td>repository</td>
<td>String</td>
<td>[0|1]</td>
<td>
The directory where files will be temporarily stored (default is
".").
On Win32 file systems an entry of the form
<code>f:\path\to\upload\repository</code>
is most likely necessary.
</td>
</tr>
<tr>
<td>sizeMax</td>
<td>Integer</td>
<td>[0|1]</td>
<td>
The maximum size of a request that will be processed
(default is 1048576 bytes).
</td>
</tr>
<tr>
<td>sizeThreshold</td>
<td>Integer</td>
<td>[0|1]</td>
<td>
The maximum size of a request that will have it's elements cached in
memory (default is 10240 bytes).
</td>
</tr>
<tr>
<td>headerEncoding</td>
<td>String</td>
<td>[0|1]</td>
<td>
Used to specify how the headers are encoded (default is
"ISO-8859-1").
</td>
</tr>
</table>
</subsection>
<subsection name="Component Configuration Example">
<source><![CDATA[
<upload repository="target" sizeMax="1048576" sizeThreshold="10240" headerEncoding="UTF-8"/>
]]></source>
</subsection>
</section>
<section name="Usage">
<p>
Create an HTML form of the type:
</p>
<source test=""><![CDATA[
<form enctype="multipart/form-data" method="POST">
<input type="hidden" name="action" value="UploadExample" />
<input type="file" name="filename">
<input type="submit" value="upload" />
</form>
]]></source>
<p>
The Upload Service manages the storage of the FileItem in memory or at
the configured repository location in the file system. It is also possible to
override the repository location using the overloaded parseRequest()
methods.
</p>
<p>
Typically a request would be parsed using the Fulcrum ParameterParser
service, but you can achieve this manually thus:
</p>
<source test=""><![CDATA[
UploadService us = (UploadService) this.lookup(UploadService.ROLE);
List fileItems = us.parse(request);
]]></source>
<p>
FileItem provides many methods for working with the uploaded files that will
function whether a file is loaded into memory or as a temporary
file.
All the temporary storage management and clean up occurs behind the
scenes transparently to your application. FileItem objects do not span Requests,
finalizers remove any temporary files created along the way.
</p>
</section>
</body>
</document>