01: // Copyright (C) 1999-2001 by Jason Hunter <jhunter_AT_acm_DOT_org>.
02: // All rights reserved. Use of this class is limited.
03: // Please see the LICENSE for more information.
04:
05: package com.oreilly.servlet.multipart;
06:
07: import java.io.ByteArrayOutputStream;
08: import java.io.IOException;
09: import java.io.UnsupportedEncodingException;
10: import javax.servlet.ServletInputStream;
11:
12: /**
13: * A <code>ParamPart</code> is an upload part which represents a normal
14: * <code>INPUT</code> (for example a non <code>TYPE="file"</code>) form
15: * parameter.
16: *
17: * @author Geoff Soutter
18: * @author Jason Hunter
19: * @version 1.1, 2002/04/30, added better encoding support, thanks to
20: * Changshin Lee
21: * @version 1.0, 2000/10/27, initial revision
22: */
23: public class ParamPart extends Part {
24:
25: /** contents of the parameter */
26: private byte[] value;
27:
28: private String encoding;
29:
30: /**
31: * Constructs a parameter part; this is called by the parser.
32: *
33: * @param name the name of the parameter.
34: * @param in the servlet input stream to read the parameter value from.
35: * @param boundary the MIME boundary that delimits the end of parameter value.
36: * @param encoding the byte-to-char encoding to use by default
37: * value.
38: */
39: ParamPart(String name, ServletInputStream in, String boundary,
40: String encoding) throws IOException {
41: super (name);
42: this .encoding = encoding;
43:
44: // Copy the part's contents into a byte array
45: PartInputStream pis = new PartInputStream(in, boundary);
46: ByteArrayOutputStream baos = new ByteArrayOutputStream(512);
47: byte[] buf = new byte[128];
48: int read;
49: while ((read = pis.read(buf)) != -1) {
50: baos.write(buf, 0, read);
51: }
52: pis.close();
53: baos.close();
54:
55: // save it for later
56: value = baos.toByteArray();
57: }
58:
59: /**
60: * Returns the value of the parameter as an array of bytes or a zero length
61: * array if the user entered no value for this parameter.
62: *
63: * @return value of parameter as raw bytes
64: */
65: public byte[] getValue() {
66: return value;
67: }
68:
69: /**
70: * Returns the value of the parameter in as a string (using the
71: * parser-specified encoding to convert from bytes) or the empty string
72: * if the user entered no value for this parameter.
73: *
74: * @return value of parameter as a string.
75: */
76: public String getStringValue() throws UnsupportedEncodingException {
77: return getStringValue(encoding);
78: }
79:
80: /**
81: * Returns the value of the parameter in the supplied encoding
82: * or empty string if the user entered no value for this parameter.
83: *
84: * @return value of parameter as a string.
85: */
86: public String getStringValue(String encoding)
87: throws UnsupportedEncodingException {
88: return new String(value, encoding);
89: }
90:
91: /**
92: * Returns <code>true</code> to indicate this part is a parameter.
93: *
94: * @return true.
95: */
96: public boolean isParam() {
97: return true;
98: }
99: }
|