* Moved getSubHeader() method from FileUpload to MimePart and made it public static

* Check charset in MimePart.getText()
* Increase default uploadLimit in FileUpload to 4 MB
This commit is contained in:
hns 2003-10-14 09:48:30 +00:00
parent c55a192d5d
commit 710dd12e17
2 changed files with 45 additions and 31 deletions

View file

@ -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;
}
}

View file

@ -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
* <code>Content-Type: text/plain; charset="UTF-8"</code>
*/
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;
}
}