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