View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.fileupload;
18  
19  import java.io.File;
20  import java.util.List;
21  import javax.servlet.http.HttpServletRequest;
22  
23  /**
24   * <p>High level API for processing file uploads.</p>
25   *
26   * <p>This class handles multiple files per single HTML widget, sent using
27   * <code>multipart/mixed</code> encoding type, as specified by
28   * <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>.  Use {@link
29   * #parseRequest(HttpServletRequest)} to acquire a list of {@link
30   * org.apache.commons.fileupload.FileItem}s associated with a given HTML
31   * widget.</p>
32   *
33   * <p>Individual parts will be stored in temporary disk storage or in memory,
34   * depending on their size, and will be available as {@link
35   * org.apache.commons.fileupload.FileItem}s.</p>
36   *
37   * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
38   * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
39   * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
40   * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
41   * @author <a href="mailto:martinc@apache.org">Martin Cooper</a>
42   * @author Sean C. Sullivan
43   *
44   * @version $Id: DiskFileUpload.java 479484 2006-11-27 01:06:53Z jochen $
45   *
46   * @deprecated Use <code>ServletFileUpload</code> together with
47   *             <code>DiskFileItemFactory</code> instead.
48   */
49  public class DiskFileUpload
50      extends FileUploadBase {
51  
52      // ----------------------------------------------------------- Data members
53  
54  
55      /**
56       * The factory to use to create new form items.
57       */
58      private DefaultFileItemFactory fileItemFactory;
59  
60  
61      // ----------------------------------------------------------- Constructors
62  
63  
64      /**
65       * Constructs an instance of this class which uses the default factory to
66       * create <code>FileItem</code> instances.
67       *
68       * @see #DiskFileUpload(DefaultFileItemFactory fileItemFactory)
69       *
70       * @deprecated Use <code>FileUpload</code> instead.
71       */
72      public DiskFileUpload() {
73          super();
74          this.fileItemFactory = new DefaultFileItemFactory();
75      }
76  
77  
78      /**
79       * Constructs an instance of this class which uses the supplied factory to
80       * create <code>FileItem</code> instances.
81       *
82       * @see #DiskFileUpload()
83       * @param fileItemFactory The file item factory to use.
84       *
85       * @deprecated Use <code>FileUpload</code> instead.
86       */
87      public DiskFileUpload(DefaultFileItemFactory fileItemFactory) {
88          super();
89          this.fileItemFactory = fileItemFactory;
90      }
91  
92  
93      // ----------------------------------------------------- Property accessors
94  
95  
96      /**
97       * Returns the factory class used when creating file items.
98       *
99       * @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 }