1 16 package org.apache.myfaces.component.html.util; 17 18 import java.io.IOException ; 19 20 import javax.servlet.Filter ; 21 import javax.servlet.FilterChain ; 22 import javax.servlet.FilterConfig ; 23 import javax.servlet.ServletException ; 24 import javax.servlet.ServletRequest ; 25 import javax.servlet.ServletResponse ; 26 import javax.servlet.http.HttpServletRequest ; 27 import javax.servlet.http.HttpServletResponse ; 28 29 import org.apache.commons.fileupload.FileUpload; 30 31 32 41 public class MultipartFilter implements Filter 42 { 43 44 private int uploadMaxFileSize = 100 * 1024 * 1024; 46 private int uploadThresholdSize = 1 * 1024 * 1024; 48 private String uploadRepositoryPath = null; 50 51 public void init(FilterConfig filterConfig) 52 { 53 uploadMaxFileSize = resolveSize(filterConfig.getInitParameter("uploadMaxFileSize"), uploadMaxFileSize); 54 uploadThresholdSize = resolveSize(filterConfig.getInitParameter("uploadThresholdSize"), uploadThresholdSize); 55 uploadRepositoryPath = filterConfig.getInitParameter("uploadRepositoryPath"); 56 } 57 58 59 private int resolveSize(String param, int defaultValue) 60 { 61 int numberParam = defaultValue; 62 63 if (param != null) 64 { 65 param = param.toLowerCase(); 66 int factor = 1; 67 String number = param; 68 69 if (param.endsWith("g")) 70 { 71 factor = 1024 * 1024 * 1024; 72 number = param.substring(0, param.length() - 1); 73 } else if (param.endsWith("m")) 74 { 75 factor = 1024 * 1024; 76 number = param.substring(0, param.length() - 1); 77 } else if (param.endsWith("k")) 78 { 79 factor = 1024; 80 number = param.substring(0, param.length() - 1); 81 } 82 83 numberParam = Integer.parseInt(number) * factor; 84 } 85 return numberParam; 86 } 87 88 89 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException , ServletException 90 { 91 if (!(response instanceof HttpServletResponse )) 92 { 93 chain.doFilter(request, response); 94 return; 95 } 96 97 HttpServletRequest httpRequest = (HttpServletRequest ) request; 98 99 if (FileUpload.isMultipartContent(httpRequest)) 101 { 102 chain.doFilter(new MultipartRequestWrapper(httpRequest, uploadMaxFileSize, uploadThresholdSize, uploadRepositoryPath), response); 103 } else 104 { 105 chain.doFilter(request, response); 106 } 107 } 108 109 110 public void destroy() 111 { 112 } 114 } 115 | Popular Tags |