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 */
017package org.apache.commons.fileupload;
018
019import java.io.File;
020import java.util.List;
021
022import javax.servlet.http.HttpServletRequest;
023
024/**
025 * <p>High level API for processing file uploads.</p>
026 *
027 * <p>This class handles multiple files per single HTML widget, sent using
028 * {@code multipart/mixed} encoding type, as specified by
029 * <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>.  Use {@link
030 * #parseRequest(HttpServletRequest)} to acquire a list of {@link
031 * org.apache.commons.fileupload.FileItem}s associated with a given HTML
032 * widget.</p>
033 *
034 * <p>Individual parts will be stored in temporary disk storage or in memory,
035 * depending on their size, and will be available as {@link
036 * org.apache.commons.fileupload.FileItem}s.</p>
037 *
038 * @deprecated 1.1 Use {@code ServletFileUpload} together with
039 *             {@code DiskFileItemFactory} instead.
040 */
041@Deprecated
042public class DiskFileUpload
043    extends FileUploadBase {
044
045    /**
046     * The factory to use to create new form items.
047     */
048    private DefaultFileItemFactory fileItemFactory;
049
050    /**
051     * Constructs an instance of this class which uses the default factory to
052     * create {@code FileItem} instances.
053     *
054     * @see #DiskFileUpload(DefaultFileItemFactory fileItemFactory)
055     * @deprecated 1.1 Use {@code FileUpload} instead.
056     */
057    @Deprecated
058    public DiskFileUpload() {
059        this.fileItemFactory = new DefaultFileItemFactory();
060    }
061
062    /**
063     * Constructs an instance of this class which uses the supplied factory to
064     * create {@code FileItem} instances.
065     *
066     * @see #DiskFileUpload()
067     * @param fileItemFactory The file item factory to use.
068     * @deprecated 1.1 Use {@code FileUpload} instead.
069     */
070    @Deprecated
071    public DiskFileUpload(final DefaultFileItemFactory fileItemFactory) {
072        this.fileItemFactory = fileItemFactory;
073    }
074
075    /**
076     * Returns the factory class used when creating file items.
077     *
078     * @return The factory class for new file items.
079     * @deprecated 1.1 Use {@code FileUpload} instead.
080     */
081    @Override
082    @Deprecated
083    public FileItemFactory getFileItemFactory() {
084        return fileItemFactory;
085    }
086
087    /**
088     * Returns the location used to temporarily store files that are larger
089     * than the configured size threshold.
090     *
091     * @return The path to the temporary file location.
092     * @see #setRepositoryPath(String)
093     * @deprecated 1.1 Use {@code DiskFileItemFactory} instead.
094     */
095    @Deprecated
096    public String getRepositoryPath() {
097        return fileItemFactory.getRepository().getPath();
098    }
099
100    /**
101     * Returns the size threshold beyond which files are written directly to
102     * disk.
103     *
104     * @return The size threshold, in bytes.
105     * @see #setSizeThreshold(int)
106     * @deprecated 1.1 Use {@code DiskFileItemFactory} instead.
107     */
108    @Deprecated
109    public int getSizeThreshold() {
110        return fileItemFactory.getSizeThreshold();
111    }
112
113    /**
114     * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
115     * compliant {@code multipart/form-data} stream. If files are stored
116     * on disk, the path is given by {@code getRepository()}.
117     *
118     * @param req           The servlet request to be parsed. Must be non-null.
119     * @param sizeThreshold The max size in bytes to be stored in memory.
120     * @param sizeMax       The maximum allowed upload size, in bytes.
121     * @param path          The location where the files should be stored.
122     * @return A list of {@code FileItem} instances parsed from the
123     *         request, in the order that they were transmitted.
124     *
125     * @throws FileUploadException if there are problems reading/parsing
126     *                             the request or storing files.
127     *
128     * @deprecated 1.1 Use {@code ServletFileUpload} instead.
129     */
130    @Deprecated
131    public List<FileItem> parseRequest(final HttpServletRequest req,
132                                            final int sizeThreshold,
133                                            final long sizeMax, final String path)
134        throws FileUploadException {
135        setSizeThreshold(sizeThreshold);
136        setSizeMax(sizeMax);
137        setRepositoryPath(path);
138        return parseRequest(req);
139    }
140
141    /**
142     * Sets the factory class to use when creating file items. The factory must
143     * be an instance of {@code DefaultFileItemFactory} or a subclass
144     * thereof, or else a {@code ClassCastException} will be thrown.
145     *
146     * @param fileItemFactory The factory class for new file items.
147     * @deprecated 1.1 Use {@code FileUpload} instead.
148     */
149    @Override
150    @Deprecated
151    public void setFileItemFactory(final FileItemFactory fileItemFactory) {
152        this.fileItemFactory = (DefaultFileItemFactory) fileItemFactory;
153    }
154
155    /**
156     * Sets the location used to temporarily store files that are larger
157     * than the configured size threshold.
158     *
159     * @param repositoryPath The path to the temporary file location.
160     * @see #getRepositoryPath()
161     * @deprecated 1.1 Use {@code DiskFileItemFactory} instead.
162     */
163    @Deprecated
164    public void setRepositoryPath(final String repositoryPath) {
165        fileItemFactory.setRepository(new File(repositoryPath));
166    }
167
168    /**
169     * Sets the size threshold beyond which files are written directly to disk.
170     *
171     * @param sizeThreshold The size threshold, in bytes.
172     * @see #getSizeThreshold()
173     * @deprecated 1.1 Use {@code DiskFileItemFactory} instead.
174     */
175    @Deprecated
176    public void setSizeThreshold(final int sizeThreshold) {
177        fileItemFactory.setSizeThreshold(sizeThreshold);
178    }
179
180}