diff --git a/src/helma/util/FileUpload.java b/src/helma/util/FileUpload.java index ecdfdb4f..4baae320 100644 --- a/src/helma/util/FileUpload.java +++ b/src/helma/util/FileUpload.java @@ -31,7 +31,7 @@ public class FileUpload { * Creates a new FileUpload object. */ public FileUpload() { - maxKbytes = 1024; + maxKbytes = 4096; } /** @@ -67,7 +67,7 @@ public class FileUpload { throws Exception { parts = new Hashtable(); - String boundary = getSubHeader(contentType, "boundary"); + String boundary = MimePart.getSubHeader(contentType, "boundary"); if (boundary == null) { throw new MimeParserException("Error parsing MIME input stream."); @@ -107,8 +107,8 @@ public class FileUpload { String type = headers.getValue("Content-Type"); String disposition = headers.getValue("Content-Disposition"); - String name = getSubHeader(disposition, "name"); - String filename = getSubHeader(disposition, "filename"); + String name = MimePart.getSubHeader(disposition, "name"); + String filename = MimePart.getSubHeader(disposition, "filename"); if (filename != null) { int sep = filename.lastIndexOf("\\"); @@ -133,28 +133,4 @@ public class FileUpload { } } } - - private String getSubHeader(String header, String subHeaderName) { - if (header == null) { - return null; - } - - String retval = null; - StringTokenizer headerTokenizer = new StringTokenizer(header, ";"); - - while (headerTokenizer.hasMoreTokens()) { - String token = headerTokenizer.nextToken().trim(); - int i = token.indexOf("="); - - if (i > 0) { - String hname = token.substring(0, i).trim(); - - if (hname.equalsIgnoreCase(subHeaderName)) { - retval = token.substring(i + 1).replace('"', ' ').trim(); - } - } - } - - return retval; - } } diff --git a/src/helma/util/MimePart.java b/src/helma/util/MimePart.java index 2003aba7..feb28e8a 100644 --- a/src/helma/util/MimePart.java +++ b/src/helma/util/MimePart.java @@ -18,6 +18,7 @@ package helma.util; import java.io.*; import java.util.Date; +import java.util.StringTokenizer; /** * This represents a MIME part of a HTTP file upload @@ -87,9 +88,17 @@ public class MimePart implements Serializable { */ public String getText() { if ((contentType == null) || contentType.startsWith("text/") - || contentType.equals("application/text")) { - // FIXME: check for encoding - return new String(content); + || contentType.startsWith("application/text")) { + String charset = getSubHeader(contentType, "charset"); + if (charset != null) { + try { + return new String(content, charset); + } catch (UnsupportedEncodingException uee) { + return new String(content); + } + } else { + return new String(content); + } } else { return null; } @@ -151,4 +160,33 @@ public class MimePart implements Serializable { return null; } } + + /** + * Get a sub-header from a header, e.g. the charset from + * Content-Type: text/plain; charset="UTF-8" + */ + public static String getSubHeader(String header, String subHeaderName) { + if (header == null) { + return null; + } + + StringTokenizer headerTokenizer = new StringTokenizer(header, ";"); + + while (headerTokenizer.hasMoreTokens()) { + String token = headerTokenizer.nextToken().trim(); + int i = token.indexOf("="); + + if (i > 0) { + String hname = token.substring(0, i).trim(); + + if (hname.equalsIgnoreCase(subHeaderName)) { + String value = token.substring(i + 1); + return value.replace('"', ' ').trim(); + } + } + } + + return null; + } + }