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++) {