You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2013/03/12 13:55:16 UTC

svn commit: r1455515 - in /commons/proper/fileupload/trunk: RELEASE-NOTES.txt src/changes/changes.xml src/main/java/org/apache/commons/fileupload/FileUploadBase.java src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java

Author: simonetripodi
Date: Tue Mar 12 12:55:16 2013
New Revision: 1455515

URL: http://svn.apache.org/r1455515
Log:
[FILEUPLOAD-210] #comment as requested by the user, added a new method that maps each FileItem to its related field name, so users can access to them by key #resolved

Modified:
    commons/proper/fileupload/trunk/RELEASE-NOTES.txt
    commons/proper/fileupload/trunk/src/changes/changes.xml
    commons/proper/fileupload/trunk/src/main/java/org/apache/commons/fileupload/FileUploadBase.java
    commons/proper/fileupload/trunk/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java

Modified: commons/proper/fileupload/trunk/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/RELEASE-NOTES.txt?rev=1455515&r1=1455514&r2=1455515&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/RELEASE-NOTES.txt (original)
+++ commons/proper/fileupload/trunk/RELEASE-NOTES.txt Tue Mar 12 12:55:16 2013
@@ -75,6 +75,7 @@ Improvement
  * [FILEUPLOAD-182] - Documentation: add simple HTML form example to fileupload user guide
  * [FILEUPLOAD-207] - enhance file read/write performance
  * [FILEUPLOAD-209] - Add Support for Generic Types
+ * [FILEUPLOAD-210] - Process HTTP Requests Into Maps
  * [FILEUPLOAD-223] - Update commons-io dependency to latest version that supports JDK1.5
  * [FILEUPLOAD-224] - Avoid string concatenations while parsing headers, use buffers instead
  * [FILEUPLOAD-225] - Replace java.rmi.server.UID() with java.util.UUID

Modified: commons/proper/fileupload/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/changes/changes.xml?rev=1455515&r1=1455514&r2=1455515&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/changes/changes.xml (original)
+++ commons/proper/fileupload/trunk/src/changes/changes.xml Tue Mar 12 12:55:16 2013
@@ -122,6 +122,9 @@ The <action> type attribute can be add,u
       <action issue="FILEUPLOAD-209" dev="simonetripodi" type="add" due-to="Fernando Ribeiro">
         Add Support for Generic Types
       </action>
+      <action issue="FILEUPLOAD-210" dev="simonetripodi" type="add" due-to="Fernando Ribeiro">
+        Process HTTP Requests Into Maps
+      </action>
       <action issue="FILEUPLOAD-223" dev="simonetripodi" type="update" due-to="">
         Update commons-io dependency to latest version that supports JDK1.5
       </action>

Modified: commons/proper/fileupload/trunk/src/main/java/org/apache/commons/fileupload/FileUploadBase.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/main/java/org/apache/commons/fileupload/FileUploadBase.java?rev=1455515&r1=1455514&r2=1455515&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/main/java/org/apache/commons/fileupload/FileUploadBase.java (original)
+++ commons/proper/fileupload/trunk/src/main/java/org/apache/commons/fileupload/FileUploadBase.java Tue Mar 12 12:55:16 2013
@@ -372,6 +372,39 @@ public abstract class FileUploadBase {
         }
     }
 
+    /**
+     * Processes an <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>
+     * compliant <code>multipart/form-data</code> stream.
+     *
+     * @param ctx The context for the request to be parsed.
+     *
+     * @return A map of <code>FileItem</code> instances parsed from the request.
+     *
+     * @throws FileUploadException if there are problems reading/parsing
+     *                             the request or storing files.
+     *
+     * @since 1.3
+     */
+    public Map<String, List<FileItem>> parseParameterMap(RequestContext ctx)
+            throws FileUploadException {
+        final List<FileItem> items = parseRequest(ctx);
+        final Map<String, List<FileItem>> itemsMap = new HashMap<String, List<FileItem>>(items.size());
+
+        for (FileItem fileItem : items) {
+            String fieldName = fileItem.getFieldName();
+            List<FileItem> mappedItems = itemsMap.get(fieldName);
+
+            if (mappedItems == null) {
+                mappedItems = new ArrayList<FileItem>();
+                itemsMap.put(fieldName, mappedItems);
+            }
+
+            mappedItems.add(fileItem);
+        }
+
+        return itemsMap;
+    }
+
     // ------------------------------------------------------ Protected methods
 
     /**

Modified: commons/proper/fileupload/trunk/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java
URL: http://svn.apache.org/viewvc/commons/proper/fileupload/trunk/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java?rev=1455515&r1=1455514&r2=1455515&view=diff
==============================================================================
--- commons/proper/fileupload/trunk/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java (original)
+++ commons/proper/fileupload/trunk/src/test/java/org/apache/commons/fileupload/ServletFileUploadTest.java Tue Mar 12 12:55:16 2013
@@ -25,9 +25,13 @@ import static org.junit.Assert.fail;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.List;
+import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.fileupload.servlet.ServletRequestContext;
 import org.junit.Test;
 
 /**
@@ -356,6 +360,46 @@ public class ServletFileUploadTest exten
         assertHeaders(headerNames, headerValues, multi1, 3);
     }
 
+    /**
+     * Test case for <a href="http://issues.apache.org/jira/browse/FILEUPLOAD-210">
+     */
+    @Test
+    public void parseParameterMap()
+            throws Exception {
+        String text = "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"file\"; filename=\"foo.tab\"\r\n" +
+                      "Content-Type: text/whatever\r\n" +
+                      "\r\n" +
+                      "This is the content of the file\n" +
+                      "\r\n" +
+                      "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"field\"\r\n" +
+                      "\r\n" +
+                      "fieldValue\r\n" +
+                      "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"multi\"\r\n" +
+                      "\r\n" +
+                      "value1\r\n" +
+                      "-----1234\r\n" +
+                      "Content-Disposition: form-data; name=\"multi\"\r\n" +
+                      "\r\n" +
+                      "value2\r\n" +
+                      "-----1234--\r\n";
+        byte[] bytes = text.getBytes("US-ASCII");
+        ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
+        HttpServletRequest request = new MockHttpServletRequest(bytes, CONTENT_TYPE);
+
+        Map<String, List<FileItem>> mappedParameters = upload.parseParameterMap(new ServletRequestContext(request));
+        assertTrue(mappedParameters.containsKey("file"));
+        assertEquals(1, mappedParameters.get("file").size());
+
+        assertTrue(mappedParameters.containsKey("field"));
+        assertEquals(1, mappedParameters.get("field").size());
+
+        assertTrue(mappedParameters.containsKey("multi"));
+        assertEquals(2, mappedParameters.get("multi").size());
+    }
+
     private void assertHeaders(String[] pHeaderNames, String[] pHeaderValues,
                                FileItem pItem, int pIndex) {
         for (int i = 0;  i < pHeaderNames.length;  i++) {