1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.component.html.util;
20
21 import java.io.IOException;
22
23 import javax.servlet.Filter;
24 import javax.servlet.FilterChain;
25 import javax.servlet.FilterConfig;
26 import javax.servlet.ServletException;
27 import javax.servlet.ServletRequest;
28 import javax.servlet.ServletResponse;
29 import javax.servlet.http.HttpServletRequest;
30 import javax.servlet.http.HttpServletResponse;
31
32 import org.apache.commons.fileupload.servlet.ServletFileUpload;
33 import org.apache.myfaces.webapp.filter.MultipartRequestWrapper;
34
35
36
37
38
39
40
41
42
43
44
45 public class MultipartFilter implements Filter
46 {
47
48 private int uploadMaxSize = 100 * 1024 * 1024;
49
50 private int uploadMaxFileSize = 100 * 1024 * 1024;
51
52 private int uploadThresholdSize = 1 * 1024 * 1024;
53
54 private String uploadRepositoryPath = null;
55
56 private boolean cacheFileSizeErrors = false;
57
58 public void init(FilterConfig filterConfig)
59 {
60 uploadMaxFileSize = resolveSize(filterConfig.getInitParameter("uploadMaxFileSize"), uploadMaxFileSize);
61 String param = filterConfig.getInitParameter("uploadMaxSize");
62 if (param != null)
63 {
64 uploadMaxSize = resolveSize(param, uploadMaxSize);
65 }
66 else
67 {
68
69 uploadMaxSize = resolveSize(param, uploadMaxFileSize);
70 }
71 uploadThresholdSize = resolveSize(filterConfig.getInitParameter("uploadThresholdSize"), uploadThresholdSize);
72 uploadRepositoryPath = filterConfig.getInitParameter("uploadRepositoryPath");
73 cacheFileSizeErrors = getBooleanValue(filterConfig.getInitParameter("cacheFileSizeErrors"), false);
74 }
75
76
77 private int resolveSize(String param, int defaultValue)
78 {
79 int numberParam = defaultValue;
80
81 if (param != null)
82 {
83 param = param.toLowerCase();
84 int factor = 1;
85 String number = param;
86
87 if (param.endsWith("g"))
88 {
89 factor = 1024 * 1024 * 1024;
90 number = param.substring(0, param.length() - 1);
91 } else if (param.endsWith("m"))
92 {
93 factor = 1024 * 1024;
94 number = param.substring(0, param.length() - 1);
95 } else if (param.endsWith("k"))
96 {
97 factor = 1024;
98 number = param.substring(0, param.length() - 1);
99 }
100
101 numberParam = Integer.parseInt(number) * factor;
102 }
103 return numberParam;
104 }
105
106 private static boolean getBooleanValue(String initParameter, boolean defaultVal)
107 {
108 if(initParameter == null || initParameter.trim().length()==0)
109 return defaultVal;
110
111 return (initParameter.equalsIgnoreCase("on") || initParameter.equals("1") || initParameter.equalsIgnoreCase("true"));
112 }
113
114 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
115 {
116 if (!(response instanceof HttpServletResponse))
117 {
118 chain.doFilter(request, response);
119 return;
120 }
121
122 HttpServletRequest httpRequest = (HttpServletRequest) request;
123
124
125 if (ServletFileUpload.isMultipartContent(httpRequest))
126 {
127 chain.doFilter(new MultipartRequestWrapper(httpRequest, uploadMaxFileSize,
128 uploadThresholdSize, uploadRepositoryPath, uploadMaxSize , cacheFileSizeErrors), response);
129 } else
130 {
131 chain.doFilter(request, response);
132 }
133 }
134
135
136 public void destroy()
137 {
138
139 }
140 }