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;
021import 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 * @version $Id: DiskFileUpload.java 1454690 2013-03-09 12:08:48Z simonetripodi $
038 *
039 * @deprecated 1.1 Use <code>ServletFileUpload</code> together with
040 *             <code>DiskFileItemFactory</code> instead.
041 */
042@Deprecated
043public class DiskFileUpload
044    extends FileUploadBase {
045
046    // ----------------------------------------------------------- Data members
047
048    /**
049     * The factory to use to create new form items.
050     */
051    private DefaultFileItemFactory fileItemFactory;
052
053    // ----------------------------------------------------------- Constructors
054
055    /**
056     * Constructs an instance of this class which uses the default factory to
057     * create <code>FileItem</code> instances.
058     *
059     * @see #DiskFileUpload(DefaultFileItemFactory fileItemFactory)
060     *
061     * @deprecated 1.1 Use <code>FileUpload</code> instead.
062     */
063    @Deprecated
064    public DiskFileUpload() {
065        super();
066        this.fileItemFactory = new DefaultFileItemFactory();
067    }
068
069    /**
070     * Constructs an instance of this class which uses the supplied factory to
071     * create <code>FileItem</code> instances.
072     *
073     * @see #DiskFileUpload()
074     * @param fileItemFactory The file item factory to use.
075     *
076     * @deprecated 1.1 Use <code>FileUpload</code> instead.
077     */
078    @Deprecated
079    public DiskFileUpload(DefaultFileItemFactory fileItemFactory) {
080        super();
081        this.fileItemFactory = fileItemFactory;
082    }
083
084    // ----------------------------------------------------- Property accessors
085
086    /**
087     * Returns the factory class used when creating file items.
088     *
089     * @return The factory class for new file items.
090     *
091     * @deprecated 1.1 Use <code>FileUpload</code> instead.
092     */
093    @Override
094    @Deprecated
095    public FileItemFactory getFileItemFactory() {
096        return fileItemFactory;
097    }
098
099    /**
100     * Sets the factory class to use when creating file items. The factory must
101     * be an instance of <code>DefaultFileItemFactory</code> or a subclass
102     * thereof, or else a <code>ClassCastException</code> will be thrown.
103     *
104     * @param factory The factory class for new file items.
105     *
106     * @deprecated 1.1 Use <code>FileUpload</code> instead.
107     */
108    @Override
109    @Deprecated
110    public void setFileItemFactory(FileItemFactory factory) {
111        this.fileItemFactory = (DefaultFileItemFactory) factory;
112    }
113
114    /**
115     * Returns the size threshold beyond which files are written directly to
116     * disk.
117     *
118     * @return The size threshold, in bytes.
119     *
120     * @see #setSizeThreshold(int)
121     *
122     * @deprecated 1.1 Use <code>DiskFileItemFactory</code> instead.
123     */
124    @Deprecated
125    public int getSizeThreshold() {
126        return fileItemFactory.getSizeThreshold();
127    }
128
129    /**
130     * Sets the size threshold beyond which files are written directly to disk.
131     *
132     * @param sizeThreshold The size threshold, in bytes.
133     *
134     * @see #getSizeThreshold()
135     *
136     * @deprecated 1.1 Use <code>DiskFileItemFactory</code> instead.
137     */
138    @Deprecated
139    public void setSizeThreshold(int sizeThreshold) {
140        fileItemFactory.setSizeThreshold(sizeThreshold);
141    }
142
143    /**
144     * Returns the location used to temporarily store files that are larger
145     * than the configured size threshold.
146     *
147     * @return The path to the temporary file location.
148     *
149     * @see #setRepositoryPath(String)
150     *
151     * @deprecated 1.1 Use <code>DiskFileItemFactory</code> instead.
152     */
153    @Deprecated
154    public String getRepositoryPath() {
155        return fileItemFactory.getRepository().getPath();
156    }
157
158    /**
159     * Sets the location used to temporarily store files that are larger
160     * than the configured size threshold.
161     *
162     * @param repositoryPath The path to the temporary file location.
163     *
164     * @see #getRepositoryPath()
165     *
166     * @deprecated 1.1 Use <code>DiskFileItemFactory</code> instead.
167     */
168    @Deprecated
169    public void setRepositoryPath(String repositoryPath) {
170        fileItemFactory.setRepository(new File(repositoryPath));
171    }
172
173    // --------------------------------------------------------- Public methods
174
175    /**
176     * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
177     * compliant <code>multipart/form-data</code> stream. If files are stored
178     * on disk, the path is given by <code>getRepository()</code>.
179     *
180     * @param req           The servlet request to be parsed. Must be non-null.
181     * @param sizeThreshold The max size in bytes to be stored in memory.
182     * @param sizeMax       The maximum allowed upload size, in bytes.
183     * @param path          The location where the files should be stored.
184     *
185     * @return A list of <code>FileItem</code> instances parsed from the
186     *         request, in the order that they were transmitted.
187     *
188     * @throws FileUploadException if there are problems reading/parsing
189     *                             the request or storing files.
190     *
191     * @deprecated 1.1 Use <code>ServletFileUpload</code> instead.
192     */
193    @Deprecated
194    public List<FileItem> parseRequest(HttpServletRequest req,
195                                            int sizeThreshold,
196                                            long sizeMax, String path)
197        throws FileUploadException {
198        setSizeThreshold(sizeThreshold);
199        setSizeMax(sizeMax);
200        setRepositoryPath(path);
201        return parseRequest(req);
202    }
203
204}