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