1
22
23 package com.liferay.util.servlet;
24
25 import com.liferay.portal.kernel.util.GetterUtil;
26 import com.liferay.util.SystemProperties;
27 import com.liferay.util.servlet.fileupload.LiferayFileItem;
28 import com.liferay.util.servlet.fileupload.LiferayFileItemFactory;
29 import com.liferay.util.servlet.fileupload.LiferayFileUpload;
30 import com.liferay.util.servlet.fileupload.LiferayServletRequest;
31
32 import java.io.File;
33 import java.io.IOException;
34
35 import java.util.ArrayList;
36 import java.util.Collections;
37 import java.util.Enumeration;
38 import java.util.HashMap;
39 import java.util.Iterator;
40 import java.util.LinkedHashMap;
41 import java.util.List;
42 import java.util.Map;
43
44 import javax.servlet.ServletInputStream;
45 import javax.servlet.http.HttpServletRequest;
46 import javax.servlet.http.HttpServletRequestWrapper;
47
48 import org.apache.commons.fileupload.FileUploadException;
49 import org.apache.commons.fileupload.servlet.ServletFileUpload;
50 import org.apache.commons.logging.Log;
51 import org.apache.commons.logging.LogFactory;
52
53
61 public class UploadServletRequest extends HttpServletRequestWrapper {
62
63 public static final int DEFAULT_SIZE_MAX = GetterUtil.getInteger(
64 SystemProperties.get(
65 UploadServletRequest.class.getName() + ".max.size"));
66
67 public static final File DEFAULT_TEMP_DIR = new File(
68 GetterUtil.getString(
69 SystemProperties.get(
70 UploadServletRequest.class.getName() + ".temp.dir"),
71 SystemProperties.get(SystemProperties.TMP_DIR)));
72
73 public UploadServletRequest(HttpServletRequest req)
74 throws IOException {
75
76 super(req);
77
78 _params = new LinkedHashMap();
79
80 try {
81 ServletFileUpload servletFileUpload = new LiferayFileUpload(
82 new LiferayFileItemFactory(DEFAULT_TEMP_DIR), req);
83
84 servletFileUpload.setSizeMax(DEFAULT_SIZE_MAX);
85
86 _lsr = new LiferayServletRequest(req);
87
88 List list = servletFileUpload.parseRequest(_lsr);
89
90 for (int i = 0; i < list.size(); i++) {
91 LiferayFileItem fileItem = (LiferayFileItem)list.get(i);
92
93 if (fileItem.isFormField()) {
94 fileItem.setString(req.getCharacterEncoding());
95 }
96
97 LiferayFileItem[] fileItems =
98 (LiferayFileItem[])_params.get(fileItem.getFieldName());
99
100 if (fileItems == null) {
101 fileItems = new LiferayFileItem[] {fileItem};
102 }
103 else {
104 LiferayFileItem[] newFileItems =
105 new LiferayFileItem[fileItems.length + 1];
106
107 System.arraycopy(
108 fileItems, 0, newFileItems, 0, fileItems.length);
109
110 newFileItems[newFileItems.length - 1] = fileItem;
111
112 fileItems = newFileItems;
113 }
114
115 _params.put(fileItem.getFieldName(), fileItems);
116 }
117 }
118 catch (FileUploadException fue) {
119 _log.error(fue.getMessage());
120 }
121 }
122
123 public String getContentType(String name) {
124 LiferayFileItem[] fileItems = (LiferayFileItem[])_params.get(name);
125
126 if ((fileItems != null) && (fileItems.length > 0)) {
127 return fileItems[0].getContentType();
128 }
129 else {
130 return null;
131 }
132 }
133
134 public File getFile(String name) {
135 if (getFileName(name) == null) {
136 return null;
137 }
138
139 LiferayFileItem[] fileItems = (LiferayFileItem[])_params.get(name);
140
141 if ((fileItems != null) && (fileItems.length > 0)) {
142 return fileItems[0].getStoreLocation();
143 }
144 else {
145 return null;
146 }
147 }
148
149 public String getFileName(String name) {
150 LiferayFileItem[] fileItems = (LiferayFileItem[])_params.get(name);
151
152 if ((fileItems != null) && (fileItems.length > 0)) {
153 return fileItems[0].getFileName();
154 }
155 else {
156 return null;
157 }
158 }
159
160 public String getFullFileName(String name) {
161 LiferayFileItem[] fileItems = (LiferayFileItem[])_params.get(name);
162
163 if ((fileItems != null) && (fileItems.length > 0)) {
164 return fileItems[0].getFullFileName();
165 }
166 else {
167 return null;
168 }
169 }
170
171 public ServletInputStream getInputStream() throws IOException {
172 return _lsr.getInputStream();
173 }
174
175 public String getParameter(String name) {
176 LiferayFileItem[] fileItems = (LiferayFileItem[])_params.get(name);
177
178 if ((fileItems != null) && (fileItems.length > 0)) {
179 return fileItems[0].getString();
180 }
181 else {
182 return super.getParameter(name);
183 }
184 }
185
186 public Map getParameterMap() {
187 Map map = new HashMap();
188
189 Enumeration enu = getParameterNames();
190
191 while (enu.hasMoreElements()) {
192 String name = (String)enu.nextElement();
193
194 map.put(name, getParameterValues(name));
195 }
196
197 return map;
198 }
199
200 public Enumeration getParameterNames() {
201 List parameterNames = new ArrayList();
202
203 Enumeration enu = super.getParameterNames();
204
205 while (enu.hasMoreElements()) {
206 String name = (String)enu.nextElement();
207
208 if (!_params.containsKey(name)) {
209 parameterNames.add(name);
210 }
211 }
212
213 Iterator itr = _params.keySet().iterator();
214
215 while (itr.hasNext()) {
216 String name = (String)itr.next();
217
218 parameterNames.add(name);
219 }
220
221 return Collections.enumeration(parameterNames);
222 }
223
224 public String[] getParameterValues(String name) {
225 String[] parentValues = super.getParameterValues(name);
226
227 LiferayFileItem[] fileItems = (LiferayFileItem[])_params.get(name);
228
229 if ((fileItems == null) || (fileItems.length == 0)) {
230 return parentValues;
231 }
232 else if ((parentValues == null) || (parentValues.length == 0)) {
233 String[] values = new String[fileItems.length];
234
235 for (int i = 0; i < values.length; i++) {
236 values[i] = fileItems[i].getString();
237 }
238
239 return values;
240 }
241 else {
242 String[] values = new String[
243 parentValues.length + fileItems.length];
244
245 System.arraycopy(
246 parentValues, 0, values, 0, parentValues.length);
247
248 for (int i = parentValues.length; i < values.length; i++) {
249 values[i] = fileItems[i - parentValues.length].getString();
250 }
251
252 return values;
253 }
254 }
255
256 public Map getMultipartParameterMap() {
257 return _params;
258 }
259
260 public Boolean isFormField(String name) {
261 LiferayFileItem[] fileItems = (LiferayFileItem[])_params.get(name);
262
263 if ((fileItems != null) && (fileItems.length > 0)) {
264 return new Boolean(fileItems[0].isFormField());
265 }
266 else {
267 return null;
268 }
269 }
270
271 public void cleanUp() {
272 if ((_params != null) && !_params.isEmpty()) {
273 Iterator itr = _params.values().iterator();
274
275 while (itr.hasNext()) {
276 LiferayFileItem[] fileItems = (LiferayFileItem[])itr.next();
277
278 for (int i = 0; i < fileItems.length; i++) {
279 fileItems[i].delete();
280 }
281 }
282 }
283 }
284
285 private static Log _log = LogFactory.getLog(UploadServletRequest.class);
286
287 private LiferayServletRequest _lsr;
288 private Map _params;
289
290 }