Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java')
-rw-r--r--jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java30
1 files changed, 24 insertions, 6 deletions
diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java
index 8fcb8b2422..253d6d5f18 100644
--- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java
+++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java
@@ -45,10 +45,12 @@ import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.Part;
import org.eclipse.jetty.util.IO;
+import org.eclipse.jetty.http.MimeTypes;
import org.eclipse.jetty.util.LazyList;
import org.eclipse.jetty.util.MultiMap;
import org.eclipse.jetty.util.MultiPartInputStreamParser;
import org.eclipse.jetty.util.StringUtil;
+import org.eclipse.jetty.util.TypeUtil;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
@@ -259,11 +261,11 @@ public class MultiPartFilter implements Filter
{
try
{
- return new String((byte[])o,_encoding);
+ return getParameterBytesAsString(name, (byte[])o);
}
catch(Exception e)
{
- e.printStackTrace();
+ LOG.warn(e);
}
}
else if (o!=null)
@@ -282,9 +284,7 @@ public class MultiPartFilter implements Filter
for ( Object key : _params.keySet() )
{
- String[] a = LazyList.toStringArray(getParameter((String)key));
- cmap.put((String)key,a);
-
+ cmap.put((String)key,getParameterValues((String)key));
}
return Collections.unmodifiableMap(cmap);
@@ -318,7 +318,7 @@ public class MultiPartFilter implements Filter
{
try
{
- v[i]=new String((byte[])o,_encoding);
+ v[i]=getParameterBytesAsString(name, (byte[])o);
}
catch(Exception e)
{
@@ -341,5 +341,23 @@ public class MultiPartFilter implements Filter
{
_encoding=enc;
}
+
+
+ /* ------------------------------------------------------------------------------- */
+ private String getParameterBytesAsString (String name, byte[] bytes)
+ throws UnsupportedEncodingException
+ {
+ //check if there is a specific encoding for the parameter
+ Object ct = _params.getValue(name+CONTENT_TYPE_SUFFIX,0);
+ //use default if not
+ String contentType = _encoding;
+ if (ct != null)
+ {
+ String tmp = MimeTypes.getCharsetFromContentType((String)ct);
+ contentType = (tmp == null?_encoding:tmp);
+ }
+
+ return new String(bytes,contentType);
+ }
}
}

Back to the top