Overview

The Upload Service handles the parsing of multi-part/form-data from POST Requests, making the multi-part files available from either memory or from a specified location on the file system.

It is written for use in Turbine but it can be used in Avalon compatible container.

Configuration

First, here is the role configuration.

    
        <role
            name="org.apache.fulcrum.upload.UploadService"
            shorthand="cache"
            default-class="org.apache.fulcrum.upload.DefaultUploadService"/>
    
    

And here is the configuration:


    
        <upload repository="target" sizeMax="1048576" sizeThreshold="10240"/>
    
    

sizeMax is the maximum size of a request that will be processed.

sizeThreshold is the maximum size of a request that will have it's elements cached in

Usage

Any multi-part/form-data requests which Turbine fields, will be parsed and the appropriate files made available to ParameterParser as FileItem objects. If this is set as false, the FileItems will have to be parsed out of RunData manually with the method getRequest() available from TurbineUpload.

Set the remaining values to ones approriate for your installation. On Win32 file systems for the repository directive, an entry of the form:

    f:\path\to\upload\repository
is most likely necessary.

Create an HTML form of the type:


<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>

The Upload Service manages if the FileItem is stored in Memory or in the Repository specified in TurbineReources.properties. It is also possible to overide the TurbineResources setting for the repository by using UploadServiceFacade.getRequest() to parse the request with a custom repository directory. The UploadServiceFacade object serves as a Facade to the Upload Service by making available static methods to manage the upload internally in your application. The FileItems can be accessed in an UploadExample Action class by:

    public void doPerform(RunData data, Context context) throws Exception
    {
        //get the ParameterParser from RunData
        ParameterParser params = data.getParameters();

        //grab the FileItems available in ParameterParser
        FileItem fi = params.getFileItem("filename");

        //do work on the FileItem
        //get the file as a File
        //or outputstream etc.

    }

Once a new instance of the FileItem is created many public methods are available to work on the object, whether it is in temporary storage as memory or as a temporary file on part of the file system. All the temporary storage management and clean up occurs behind the scenes and is transparent to the application being based on Turbine. There is no need to manually clean up the FileItems as the FileItem object doesn't span Requests ( or RunData instances ) and the temporary files that use the file system are cleaned up in a finalize() method inherited from Object().

The UploadServiceFacade object and the FileItem object give all the functionality needed to manage this sort of operation or action at the application level. For more detailed information on the methods available to deal with uploaded files, view the relevant Javadocs for UploadServiceFacade, ParameterParser and FileItem.