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