    001    /*
    002     * Licensed to the Apache Software Foundation (ASF) under one or more
    003     * contributor license agreements.  See the NOTICE file distributed with
    004     * this work for additional information regarding copyright ownership.
    005     * The ASF licenses this file to You under the Apache License, Version 2.0
    006     * (the "License"); you may not use this file except in compliance with
    007     * the License.  You may obtain a copy of the License at
    008     *
    009     *      http://www.apache.org/licenses/LICENSE-2.0
    010     *
    011     * Unless required by applicable law or agreed to in writing, software
    012     * distributed under the License is distributed on an "AS IS" BASIS,
    013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014     * See the License for the specific language governing permissions and
    015     * limitations under the License.
    016     */
    017    package org.apache.commons.fileupload;
    018
    019    import java.io.File;
    020    import java.util.List;
    021    import javax.servlet.http.HttpServletRequest;
    022
    023    /**
    024     * <p>High level API for processing file uploads.</p>
    025     *
    026     * <p>This class handles multiple files per single HTML widget, sent using
    027     * <code>multipart/mixed</code> encoding type, as specified by
    028     * <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>.  Use {@link
    029     * #parseRequest(HttpServletRequest)} to acquire a list of {@link
    030     * org.apache.commons.fileupload.FileItem}s associated with a given HTML
    031     * widget.</p>
    032     *
    033     * <p>Individual parts will be stored in temporary disk storage or in memory,
    034     * depending on their size, and will be available as {@link
    035     * org.apache.commons.fileupload.FileItem}s.</p>
    036     *
    037     * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
    038     * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
    039     * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
    040     * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
    041     * @author <a href="mailto:martinc@apache.org">Martin Cooper</a>
    042     * @author Sean C. Sullivan
    043     *
    044     * @version $Id: DiskFileUpload.java 479484 2006-11-27 01:06:53Z jochen $
    045     *
    046     * @deprecated Use <code>ServletFileUpload</code> together with
    047     *             <code>DiskFileItemFactory</code> instead.
    048     */
    049    public class DiskFileUpload
    050        extends FileUploadBase {
    051
    052        // ----------------------------------------------------------- Data members
    053
    054
    055        /**
    056         * The factory to use to create new form items.
    057         */
    058        private DefaultFileItemFactory fileItemFactory;
    059
    060
    061        // ----------------------------------------------------------- Constructors
    062
    063
    064        /**
    065         * Constructs an instance of this class which uses the default factory to
    066         * create <code>FileItem</code> instances.
    067         *
    068         * @see #DiskFileUpload(DefaultFileItemFactory fileItemFactory)
    069         *
    070         * @deprecated Use <code>FileUpload</code> instead.
    071         */
    072        public DiskFileUpload() {
    073            super();
    074            this.fileItemFactory = new DefaultFileItemFactory();
    075        }
    076
    077
    078        /**
    079         * Constructs an instance of this class which uses the supplied factory to
    080         * create <code>FileItem</code> instances.
    081         *
    082         * @see #DiskFileUpload()
    083         * @param fileItemFactory The file item factory to use.
    084         *
    085         * @deprecated Use <code>FileUpload</code> instead.
    086         */
    087        public DiskFileUpload(DefaultFileItemFactory fileItemFactory) {
    088            super();
    089            this.fileItemFactory = fileItemFactory;
    090        }
    091
    092
    093        // ----------------------------------------------------- Property accessors
    094
    095
    096        /**
    097         * Returns the factory class used when creating file items.
    098         *
    099         * @return The factory class for new file items.
    100         *
    101         * @deprecated Use <code>FileUpload</code> instead.
    102         */
    103        public FileItemFactory getFileItemFactory() {
    104            return fileItemFactory;
    105        }
    106
    107
    108        /**
    109         * Sets the factory class to use when creating file items. The factory must
    110         * be an instance of <code>DefaultFileItemFactory</code> or a subclass
    111         * thereof, or else a <code>ClassCastException</code> will be thrown.
    112         *
    113         * @param factory The factory class for new file items.
    114         *
    115         * @deprecated Use <code>FileUpload</code> instead.
    116         */
    117        public void setFileItemFactory(FileItemFactory factory) {
    118            this.fileItemFactory = (DefaultFileItemFactory) factory;
    119        }
    120
    121
    122        /**
    123         * Returns the size threshold beyond which files are written directly to
    124         * disk.
    125         *
    126         * @return The size threshold, in bytes.
    127         *
    128         * @see #setSizeThreshold(int)
    129         *
    130         * @deprecated Use <code>DiskFileItemFactory</code> instead.
    131         */
    132        public int getSizeThreshold() {
    133            return fileItemFactory.getSizeThreshold();
    134        }
    135
    136
    137        /**
    138         * Sets the size threshold beyond which files are written directly to disk.
    139         *
    140         * @param sizeThreshold The size threshold, in bytes.
    141         *
    142         * @see #getSizeThreshold()
    143         *
    144         * @deprecated Use <code>DiskFileItemFactory</code> instead.
    145         */
    146        public void setSizeThreshold(int sizeThreshold) {
    147            fileItemFactory.setSizeThreshold(sizeThreshold);
    148        }
    149
    150
    151        /**
    152         * Returns the location used to temporarily store files that are larger
    153         * than the configured size threshold.
    154         *
    155         * @return The path to the temporary file location.
    156         *
    157         * @see #setRepositoryPath(String)
    158         *
    159         * @deprecated Use <code>DiskFileItemFactory</code> instead.
    160         */
    161        public String getRepositoryPath() {
    162            return fileItemFactory.getRepository().getPath();
    163        }
    164
    165
    166        /**
    167         * Sets the location used to temporarily store files that are larger
    168         * than the configured size threshold.
    169         *
    170         * @param repositoryPath The path to the temporary file location.
    171         *
    172         * @see #getRepositoryPath()
    173         *
    174         * @deprecated Use <code>DiskFileItemFactory</code> instead.
    175         */
    176        public void setRepositoryPath(String repositoryPath) {
    177            fileItemFactory.setRepository(new File(repositoryPath));
    178        }
    179
    180
    181        // --------------------------------------------------------- Public methods
    182
    183
    184        /**
    185         * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
    186         * compliant <code>multipart/form-data</code> stream. If files are stored
    187         * on disk, the path is given by <code>getRepository()</code>.
    188         *
    189         * @param req           The servlet request to be parsed. Must be non-null.
    190         * @param sizeThreshold The max size in bytes to be stored in memory.
    191         * @param sizeMax       The maximum allowed upload size, in bytes.
    192         * @param path          The location where the files should be stored.
    193         *
    194         * @return A list of <code>FileItem</code> instances parsed from the
    195         *         request, in the order that they were transmitted.
    196         *
    197         * @throws FileUploadException if there are problems reading/parsing
    198         *                             the request or storing files.
    199         *
    200         * @deprecated Use <code>ServletFileUpload</code> instead.
    201         */
    202        public List /* FileItem */ parseRequest(HttpServletRequest req,
    203                                                int sizeThreshold,
    204                                                long sizeMax, String path)
    205            throws FileUploadException {
    206            setSizeThreshold(sizeThreshold);
    207            setSizeMax(sizeMax);
    208            setRepositoryPath(path);
    209            return parseRequest(req);
    210        }
    211
    212    }