Guest User

Untitled

a guest
Jun 28th, 2013
537
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.42 KB | None | 0 0
  1. import java.io.IOException;
  2. import java.io.UnsupportedEncodingException;
  3. import java.util.ArrayList;
  4. import java.util.Collections;
  5. import java.util.Enumeration;
  6. import java.util.Iterator;
  7. import java.util.LinkedHashMap;
  8. import java.util.LinkedHashSet;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.Set;
  12.  
  13. import javax.servlet.ServletException;
  14. import javax.servlet.http.HttpServletRequest;
  15. import javax.servlet.http.HttpServletRequestWrapper;
  16. import javax.servlet.http.Part;
  17.  
  18. import org.apache.commons.fileupload.FileItem;
  19. import org.slf4j.Logger;
  20. import org.slf4j.LoggerFactory;
  21.  
  22. public class MultipartRequest extends HttpServletRequestWrapper {
  23.  
  24.     private static final Logger logger = LoggerFactory.getLogger(MultipartRequest.class);
  25.  
  26.     private Map<String, List<String>> formParams;
  27.  
  28.     private Map<String, List<FileItem>> fileParams;
  29.  
  30.     private Map<String, String[]> parameterMap;
  31.  
  32.     public MultipartRequest(HttpServletRequest request) throws IOException {
  33.         super(request);
  34.         formParams = new LinkedHashMap<String, List<String>>();
  35.         fileParams = new LinkedHashMap<String, List<FileItem>>();
  36.  
  37.         try {
  38.             parseRequest(request);
  39.         } catch (ServletException e) {
  40.             // TODO Auto-generated catch block
  41.             e.printStackTrace();
  42.         }
  43.     }
  44.  
  45.     private void parseRequest(HttpServletRequest request) throws IOException, ServletException {
  46.  
  47.         Iterator<Part> parts = request.getParts().iterator();
  48.         List<FileItem> items = new ArrayList<>();
  49.  
  50.         while (parts.hasNext()) {
  51.             Part p = parts.next();
  52.  
  53.             if (p.getContentType() == null || !p.getContentType().toLowerCase().startsWith("image"))
  54.                 continue;
  55.  
  56.             items.add(new PartItem(p));
  57.         }
  58.  
  59.         List<FileItem> fileItems = items;
  60.  
  61.         for (FileItem item : fileItems) {
  62.             if (item.isFormField())
  63.                 addFormParam(item);
  64.             else
  65.                 addFileParam(item);
  66.         }
  67.     }
  68.  
  69.     private void addFileParam(FileItem item) {
  70.         if (fileParams.containsKey(item.getFieldName())) {
  71.             fileParams.get(item.getFieldName()).add(item);
  72.         } else {
  73.             List<FileItem> items = new ArrayList<FileItem>();
  74.             items.add(item);
  75.             fileParams.put(item.getFieldName(), items);
  76.         }
  77.     }
  78.  
  79.     private void addFormParam(FileItem item) {
  80.         if (formParams.containsKey(item.getFieldName())) {
  81.             formParams.get(item.getFieldName()).add(getItemString(item));
  82.         } else {
  83.             List<String> items = new ArrayList<String>();
  84.             items.add(getItemString(item));
  85.             formParams.put(item.getFieldName(), items);
  86.         }
  87.     }
  88.  
  89.     private String getItemString(FileItem item) {
  90.         try {
  91.             String characterEncoding = getRequest().getCharacterEncoding();
  92.             return (characterEncoding == null) ? item.getString() : item
  93.                     .getString(characterEncoding);
  94.         } catch (UnsupportedEncodingException e) {
  95.             logger.error("Unsupported character encoding "
  96.                     + getRequest().getCharacterEncoding());
  97.             return item.getString();
  98.         }
  99.     }
  100.  
  101.     @Override
  102.     public String getParameter(String name) {
  103.         if (formParams.containsKey(name)) {
  104.             List<String> values = formParams.get(name);
  105.             if (values.isEmpty())
  106.                 return "";
  107.             else
  108.                 return values.get(0);
  109.         } else {
  110.             return super.getParameter(name);
  111.         }
  112.     }
  113.  
  114.     @Override
  115.     public Map<String, String[]> getParameterMap() {
  116.         if (parameterMap == null) {
  117.             Map<String, String[]> map = new LinkedHashMap<String, String[]>();
  118.  
  119.             for (String formParam : formParams.keySet()) {
  120.                 map.put(formParam,
  121.                         formParams.get(formParam).toArray(new String[0]));
  122.             }
  123.  
  124.             map.putAll(super.getParameterMap());
  125.  
  126.             parameterMap = Collections.unmodifiableMap(map);
  127.         }
  128.  
  129.         return parameterMap;
  130.     }
  131.  
  132.     @Override
  133.     public Enumeration<String> getParameterNames() {
  134.         Set<String> paramNames = new LinkedHashSet<String>();
  135.         paramNames.addAll(formParams.keySet());
  136.  
  137.         Enumeration<String> original = super.getParameterNames();
  138.         while (original.hasMoreElements()) {
  139.             paramNames.add(original.nextElement());
  140.         }
  141.  
  142.         return Collections.enumeration(paramNames);
  143.     }
  144.  
  145.     @Override
  146.     public String[] getParameterValues(String name) {
  147.         if (formParams.containsKey(name)) {
  148.             List<String> values = formParams.get(name);
  149.             if (values.isEmpty())
  150.                 return new String[0];
  151.             else
  152.                 return values.toArray(new String[values.size()]);
  153.         } else {
  154.             return super.getParameterValues(name);
  155.         }
  156.     }
  157.  
  158.     public FileItem getFileItem(String name) {
  159.         if (fileParams.containsKey(name)) {
  160.             List<FileItem> items = fileParams.get(name);
  161.  
  162.             return items.get(0);
  163.         } else {
  164.             return null;
  165.         }
  166.     }
  167. }
Advertisement
Add Comment
Please, Sign In to add comment