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.portlet;
018
019 import java.io.IOException;
020 import java.util.List;
021
022 import javax.portlet.ActionRequest;
023
024 import org.apache.commons.fileupload.FileItemFactory;
025 import org.apache.commons.fileupload.FileItemIterator;
026 import org.apache.commons.fileupload.FileUpload;
027 import org.apache.commons.fileupload.FileUploadBase;
028 import org.apache.commons.fileupload.FileUploadException;
029
030 /**
031 * <p>High level API for processing file uploads.</p>
032 *
033 * <p>This class handles multiple files per single HTML widget, sent using
034 * <code>multipart/mixed</code> encoding type, as specified by
035 * <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>. Use {@link
036 * #parseRequest(javax.servlet.http.HttpServletRequest)} to acquire a list
037 * of {@link org.apache.commons.fileupload.FileItem FileItems} associated
038 * with a given HTML widget.</p>
039 *
040 * <p>How the data for individual parts is stored is determined by the factory
041 * used to create them; a given part may be in memory, on disk, or somewhere
042 * else.</p>
043 *
044 * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
045 * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
046 * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
047 * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
048 * @author <a href="mailto:martinc@apache.org">Martin Cooper</a>
049 * @author Sean C. Sullivan
050 *
051 * @since FileUpload 1.1
052 *
053 * @version $Id: PortletFileUpload.java 479484 2006-11-27 01:06:53Z jochen $
054 */
055 public class PortletFileUpload extends FileUpload {
056
057 // ---------------------------------------------------------- Class methods
058
059
060 /**
061 * Utility method that determines whether the request contains multipart
062 * content.
063 *
064 * @param request The portlet request to be evaluated. Must be non-null.
065 *
066 * @return <code>true</code> if the request is multipart;
067 * <code>false</code> otherwise.
068 */
069 public static final boolean isMultipartContent(ActionRequest request) {
070 return FileUploadBase.isMultipartContent(
071 new PortletRequestContext(request));
072 }
073
074
075 // ----------------------------------------------------------- Constructors
076
077
078 /**
079 * Constructs an uninitialised instance of this class. A factory must be
080 * configured, using <code>setFileItemFactory()</code>, before attempting
081 * to parse requests.
082 *
083 * @see FileUpload#FileUpload(FileItemFactory)
084 */
085 public PortletFileUpload() {
086 super();
087 }
088
089
090 /**
091 * Constructs an instance of this class which uses the supplied factory to
092 * create <code>FileItem</code> instances.
093 *
094 * @see FileUpload#FileUpload()
095 * @param fileItemFactory The factory to use for creating file items.
096 */
097 public PortletFileUpload(FileItemFactory fileItemFactory) {
098 super(fileItemFactory);
099 }
100
101
102 // --------------------------------------------------------- Public methods
103
104
105 /**
106 * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
107 * compliant <code>multipart/form-data</code> stream.
108 *
109 * @param request The portlet request to be parsed.
110 *
111 * @return A list of <code>FileItem</code> instances parsed from the
112 * request, in the order that they were transmitted.
113 *
114 * @throws FileUploadException if there are problems reading/parsing
115 * the request or storing files.
116 */
117 public List /* FileItem */ parseRequest(ActionRequest request)
118 throws FileUploadException {
119 return parseRequest(new PortletRequestContext(request));
120 }
121
122 /**
123 * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
124 * compliant <code>multipart/form-data</code> stream.
125 *
126 * @param request The portlet request to be parsed.
127 *
128 * @return An iterator to instances of <code>FileItemStream</code>
129 * parsed from the request, in the order that they were
130 * transmitted.
131 *
132 * @throws FileUploadException if there are problems reading/parsing
133 * the request or storing files.
134 * @throws IOException An I/O error occurred. This may be a network
135 * error while communicating with the client or a problem while
136 * storing the uploaded content.
137 */
138 public FileItemIterator getItemIterator(ActionRequest request)
139 throws FileUploadException, IOException {
140 return super.getItemIterator(new PortletRequestContext(request));
141 }
142 }