| <?xml version="1.0"?> |
| <!-- |
| /* |
| * Copyright 2001-2004 The Apache Software Foundation. |
| * |
| * Licensed 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>Turbine Services - Upload Service</title> |
| </properties> |
| |
| <body> |
| |
| <section name="Upload Service"> |
| |
| <p> |
| 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. |
| </p> |
| |
| </section> |
| |
| <section name="Configuration"> |
| |
| <source><![CDATA[ |
| # ------------------------------------------------------------------- |
| # |
| # S E R V I C E S |
| # |
| # ------------------------------------------------------------------- |
| # Classes for Turbine Services should be defined here. |
| # Format: services.[name].classname=[implementing class] |
| # |
| # To specify properties of a service use the following syntax: |
| # service.[name].[property]=[value] |
| |
| services.UploadService.classname=org.apache.turbine.services.upload.TurbineUploadService |
| . |
| . |
| . |
| # ------------------------------------------------------------------- |
| # |
| # U P L O A D S E R V I C E |
| # |
| # ------------------------------------------------------------------- |
| |
| # Whether the files should be automatically picked up by |
| # ParameterParser. |
| |
| services.UploadService.automatic=false |
| |
| # |
| # The directory where files will be temporarily stored. |
| # |
| services.UploadService.repository=. |
| |
| # |
| # The maximum size of a request that will be processed. |
| # |
| services.UploadService.size.max=1048576 |
| |
| # |
| # The maximum size of a request that will have it's elements cached in |
| # memory by TurbineUploadService class. |
| # |
| services.UploadService.size.threshold=10240 |
| ]]></source> |
| |
| </section> |
| |
| <section name="Usage"> |
| |
| <p> |
| Change the automatic directive to true. With this set to true 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. |
| </p> |
| |
| <p> |
| Set the remaining values to ones approriate for your installation. On Win32 |
| file systems for the repository directive, an entry of the form: |
| <ul> |
| <code>f:\path\to\upload\repository</code> |
| </ul> |
| is most likely necessary. |
| </p> |
| |
| |
| <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 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 |
| TurbineUpload.getRequest() to parse the request with a custom repository |
| directory. The TurbineUpload 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: |
| </p> |
| |
| <source test=""><![CDATA[ |
| 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. |
| |
| } |
| |
| ]]></source> |
| |
| <p> |
| 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(). |
| </p> |
| |
| <p> |
| The TurbineUpload 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 TurbineUpload, ParameterParser and |
| FileItem. |
| </p> |
| |
| </section> |
| |
| </body> |
| </document> |