You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cactus-dev@jakarta.apache.org by Vincent Massol <vm...@octo.com> on 2002/10/05 19:13:02 UTC
FW: cvs commit: jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/multipart FilePart.java Part.java StringPart.java
FYI.
It seems we can now quite easily offer multipart support in Cactus by
using this new feature from Commons HttpClient. Who wants to implement
this? ;-)
-Vincent
_______________________
Vincent Massol
OCTO Technology UK Ltd
http://www.octo.com
vmassol@octo.com
Tel: +44 208996 9540
> -----Original Message-----
> From: jsdever@apache.org [mailto:jsdever@apache.org]
> Sent: 01 October 2002 20:14
> To: jakarta-commons-cvs@apache.org
> Subject: cvs commit: jakarta-
>
commons/httpclient/src/java/org/apache/commons/httpclient/methods/multip
ar
> t FilePart.java Part.java StringPart.java
>
> jsdever 2002/10/01 12:13:42
>
> Added:
httpclient/src/java/org/apache/commons/httpclient/methods
> MultipartPostMethod.java
>
> httpclient/src/java/org/apache/commons/httpclient/methods/multipart
> FilePart.java Part.java StringPart.java
> Log:
> Add multipart POST support.
>
> Added a new class methods/MultiPartPost and some related classes in
the
> methods/multipart package.
>
>
http://www.mail-archive.com/commons-dev@jakarta.apache.org/msg01701.html
> http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13165
>
> Contributed by: Matthew Albright
>
> Revision Changes Path
> 1.1 jakarta-
>
commons/httpclient/src/java/org/apache/commons/httpclient/methods/Multip
ar
> tPostMethod.java
>
> Index: MultipartPostMethod.java
> ===================================================================
> /*
> * $Header: /home/cvs/jakarta-
>
commons/httpclient/src/java/org/apache/commons/httpclient/methods/Multip
ar
> tPostMethod.java,v 1.1 2002/10/01 19:13:41 jsdever Exp $
> * $Revision: 1.1 $
> * $Date: 2002/10/01 19:13:41 $
> *
====================================================================
> *
> * The Apache Software License, Version 1.1
> *
> * Copyright (c) 1992 The Apache Software Foundation. All rights
> * reserved.
> *
> * Redistribution and use in source and binary forms, with or
without
> * modification, are permitted provided that the following
conditions
> * are met:
> *
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> *
> * 2. Redistributions in binary form must reproduce the above
copyright
> * notice, this list of conditions and the following disclaimer
in
> * the documentation and/or other materials provided with the
> * distribution.
> *
> * 3. The end-user documentation included with the redistribution,
if
> * any, must include the following acknowlegement:
> * "This product includes software developed by the
> * Apache Software Foundation (http://www.apache.org/)."
> * Alternately, this acknowlegement may appear in the software
> itself,
> * if and wherever such third-party acknowlegements normally
appear.
> *
> * 4. The names "The Jakarta Project", "HttpClient", and "Apache
> Software
> * Foundation" must not be used to endorse or promote products
> derived
> * from this software without prior written permission. For
written
> * permission, please contact apache@apache.org.
> *
> * 5. Products derived from this software may not be called "Apache"
> * nor may "Apache" appear in their names without prior written
> * permission of the Apache Group.
> *
> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY,
> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT
> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF
> * SUCH DAMAGE.
> *
====================================================================
> *
> * This software consists of voluntary contributions made by many
> * individuals on behalf of the Apache Software Foundation. For
more
> * information on the Apache Software Foundation, please see
> * <http://www.apache.org/>.
> *
> * [Additional notices, if required by prior licensing conditions]
> *
> */
>
> package org.apache.commons.httpclient.methods;
>
> import java.util.List;
> import java.util.ArrayList;
> import java.util.Iterator;
> import java.io.File;
> import java.io.OutputStream;
> import java.io.IOException;
> import java.io.FileNotFoundException;
> import org.apache.commons.httpclient.*;
> import org.apache.commons.httpclient.methods.multipart.*;
>
> /**
> * POST Method for Multipart encoded forms.
> *
> * @author <a href="mailto:mattalbright@yahoo.com">Matthew
Albright</a>
> * @author <a href="mailto:jsdever@apache.org">Jeff Dever</a>
> *
> * @since 2.0
> */
> public class MultipartPostMethod extends GetMethod {
>
> private List parameters = new ArrayList();
>
> /**
> * No-arg constructor.
> */
> public MultipartPostMethod() {
> super();
> }
>
> /**
> * Path-setting constructor.
> * @param path the path to request
> */
> public MultipartPostMethod(String path) {
> super(path);
> }
>
> /**
> * Constructor.
> * @param path the path to request
> * @param tempDir directory to store temp files in
> */
> public MultipartPostMethod(String path, String tempDir) {
> super(path, tempDir);
> }
>
> /**
> * Constructor.
> * @param path the path to request
> * @param tempDir directory to store temp files in
> * @param tempFile file to store temporary data in
> */
> public MultipartPostMethod(String path, String tempDir, String
> tempFile) {
> super(path, tempDir, tempFile);
> }
>
>
> /**
> * Returns <tt>"POST"</tt>.
> * @return <tt>"POST"</tt>
> */
> public String getName() {
> return "POST";
> }
>
> /**
> * Clear my request body.
> */
> public void recycle() {
> super.recycle();
> parameters.clear();
> }
>
>
> public void addParameter(String parameterName, String
> parameterValue) {
> Part param = new StringPart(parameterName, parameterValue);
> parameters.add(param);
> }
>
>
> public void addParameter(String parameterName, File
parameterFile)
> throws FileNotFoundException {
> Part param = new FilePart(parameterName, parameterFile);
> parameters.add(param);
> }
>
>
> protected void addRequestHeaders(HttpState state, HttpConnection
> conn)
> throws IOException, HttpException {
> super.addRequestHeaders(state,conn);
>
> if (! parameters.isEmpty())
> {
> setRequestHeader("Content-Type",
> "multipart/form-data; boundary=" +
Part.getBoundary());
> }
> }
>
> /**
> * Override method of {@link HttpMethodBase}
> * to write request parameters as the
> * request body.
> */
> protected boolean writeRequestBody(HttpState state,
HttpConnection
> conn)
> throws IOException, HttpException {
> OutputStream out = conn.getRequestOutputStream();
>
> for (Iterator it = parameters.iterator(); it.hasNext();) {
> Part part = (Part)it.next();
> part.send(out);
> }
>
> Part.sendLastBoundary(out);
>
> out.close();
>
> return true;
> }
>
> /**
> * Override method of {@link HttpMethodBase}
> * to return the length of the request body.
> *
> * Once this method has been invoked,
> * the request parameters cannot be altered
> * until I am {@link #recycle recycled}.
> */
> protected int getRequestContentLength() {
> long length = 0;
>
> try {
> for (Iterator it = parameters.iterator(); it.hasNext();)
{
> Part part = (Part)it.next();
>
> length += part.length();
> }
> length += Part.lengthOfLastBoundary();
>
> } catch (IOException e) {
> // Can't throw an IOException and still override
> throw new RuntimeException(e.toString());
> }
>
> // Chop the length to the max int value.
> if (length <= Integer.MAX_VALUE) {
> return((new Long(length)).intValue());
> } else {
> return(Integer.MAX_VALUE);
> }
> }
> }
>
>
>
> 1.1 jakarta-
>
commons/httpclient/src/java/org/apache/commons/httpclient/methods/multip
ar
> t/FilePart.java
>
> Index: FilePart.java
> ===================================================================
> /*
> * $Header: /home/cvs/jakarta-
>
commons/httpclient/src/java/org/apache/commons/httpclient/methods/multip
ar
> t/FilePart.java,v 1.1 2002/10/01 19:13:41 jsdever Exp $
> * $Revision: 1.1 $
> * $Date: 2002/10/01 19:13:41 $
> *
====================================================================
> *
> * The Apache Software License, Version 1.1
> *
> * Copyright (c) 2002 The Apache Software Foundation. All rights
> * reserved.
> *
> * Redistribution and use in source and binary forms, with or
without
> * modification, are permitted provided that the following
conditions
> * are met:
> *
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> *
> * 2. Redistributions in binary form must reproduce the above
copyright
> * notice, this list of conditions and the following disclaimer
in
> * the documentation and/or other materials provided with the
> * distribution.
> *
> * 3. The end-user documentation included with the redistribution,
if
> * any, must include the following acknowlegement:
> * "This product includes software developed by the
> * Apache Software Foundation (http://www.apache.org/)."
> * Alternately, this acknowlegement may appear in the software
> itself,
> * if and wherever such third-party acknowlegements normally
appear.
> *
> * 4. The names "The Jakarta Project", "HttpClient", and "Apache
> Software
> * Foundation" must not be used to endorse or promote products
> derived
> * from this software without prior written permission. For
written
> * permission, please contact apache@apache.org.
> *
> * 5. Products derived from this software may not be called "Apache"
> * nor may "Apache" appear in their names without prior written
> * permission of the Apache Group.
> *
> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY,
> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT
> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF
> * SUCH DAMAGE.
> *
====================================================================
> *
> * This software consists of voluntary contributions made by many
> * individuals on behalf of the Apache Software Foundation. For
more
> * information on the Apache Software Foundation, please see
> * <http://www.apache.org/>.
> *
> * [Additional notices, if required by prior licensing conditions]
> *
> */
>
> package org.apache.commons.httpclient.methods.multipart;
>
> import java.io.File;
> import java.io.FileInputStream;
> import java.io.InputStream;
> import java.io.OutputStream;
> import java.io.FileNotFoundException;
> import java.io.IOException;
>
>
> /**
> * This class implements a part of a Multipart post object that
> * consists of a file.
> *
> * It makes every effort to not parse or store
> * any of the data in the file, in order to not munge a binary file,
> * and to not break if the file is huge. Hence, use a simple byte
> * array, and just shove it down the OutputStream.
> *
> * @author <a href="mailto:mattalbright@yahoo.com">Matthew
Albright</a>
> * @author <a href="mailto:jsdever@apache.org">Jeff Dever</a>
> *
> * @since 2.0
> *
> */
> public class FilePart extends Part {
>
> //TODO: make this configurable
> static int MAX_BUFF_SIZE = 1 * 1024 * 1024; // 1 MiBs
>
> private String name;
> private File file;
> private int buff_size;
>
>
> /**
> * Constructor.
> *
> * @param name
> * @param file the file to post
> *
> * @throws FileNotFoundException if the <i>file</i> is not is
normal
> * file or if it is not readable.
> */
> public FilePart(String name, File file)
> throws FileNotFoundException {
> if (! file.isFile()) {
> throw new FileNotFoundException("File is not a normal
> file.");
> }
>
> if (! file.canRead()) {
> throw new FileNotFoundException("File is not
readable.");
> }
>
> this.name = name;
> this.file = file;
> }
>
> protected void sendHeader(OutputStream out)
> throws IOException {
> super.sendHeader(out);
> sendFilename(out);
> sendContentType(out);
> }
>
> protected void sendFilename(OutputStream out)
> throws IOException {
> String filename = "; filename=\"" + file.getName() + "\"";
> out.write(filename.getBytes());
> }
>
>
> protected void sendContentType(OutputStream out)
> throws IOException {
> out.write(CRLF_bytes);
> out.write("Content-Type:
application/octet-stream".getBytes());
> }
>
> public String getName() {
> return name;
> }
>
> protected void sendData(OutputStream out)
> throws IOException {
> byte[] buff;
>
> if (lengthOfData() > MAX_BUFF_SIZE) {
> buff = new byte[MAX_BUFF_SIZE];
> } else {
> buff = new byte[(new Long(lengthOfData())).intValue()];
> }
>
> InputStream in;
>
> try {
> in = new FileInputStream(file);
>
> int len;
>
> while ((len = in.read(buff)) != -1)
> {
> out.write(buff, 0, len);
> }
> } catch (FileNotFoundException e) {
> throw new IOException(e.toString());
> }
> }
>
> protected long lengthOfData()
> throws IOException {
> return file.length();
> }
> }
>
>
>
>
> 1.1 jakarta-
>
commons/httpclient/src/java/org/apache/commons/httpclient/methods/multip
ar
> t/Part.java
>
> Index: Part.java
> ===================================================================
> /*
> * $Header: /home/cvs/jakarta-
>
commons/httpclient/src/java/org/apache/commons/httpclient/methods/multip
ar
> t/Part.java,v 1.1 2002/10/01 19:13:41 jsdever Exp $
> * $Revision: 1.1 $
> * $Date: 2002/10/01 19:13:41 $
> *
====================================================================
> *
> * The Apache Software License, Version 1.1
> *
> * Copyright (c) 2002 The Apache Software Foundation. All rights
> * reserved.
> *
> * Redistribution and use in source and binary forms, with or
without
> * modification, are permitted provided that the following
conditions
> * are met:
> *
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> *
> * 2. Redistributions in binary form must reproduce the above
copyright
> * notice, this list of conditions and the following disclaimer
in
> * the documentation and/or other materials provided with the
> * distribution.
> *
> * 3. The end-user documentation included with the redistribution,
if
> * any, must include the following acknowlegement:
> * "This product includes software developed by the
> * Apache Software Foundation (http://www.apache.org/)."
> * Alternately, this acknowlegement may appear in the software
> itself,
> * if and wherever such third-party acknowlegements normally
appear.
> *
> * 4. The names "The Jakarta Project", "HttpClient", and "Apache
> Software
> * Foundation" must not be used to endorse or promote products
> derived
> * from this software without prior written permission. For
written
> * permission, please contact apache@apache.org.
> *
> * 5. Products derived from this software may not be called "Apache"
> * nor may "Apache" appear in their names without prior written
> * permission of the Apache Group.
> *
> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY,
> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT
> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF
> * SUCH DAMAGE.
> *
====================================================================
> *
> * This software consists of voluntary contributions made by many
> * individuals on behalf of the Apache Software Foundation. For
more
> * information on the Apache Software Foundation, please see
> * <http://www.apache.org/>.
> *
> * [Additional notices, if required by prior licensing conditions]
> *
> */
>
> package org.apache.commons.httpclient.methods.multipart;
>
> import java.io.OutputStream;
> import java.io.ByteArrayOutputStream;
> import java.io.IOException;
>
> /**
> * Abstract class for one Part of a multipart post object.
> *
> * @author <a href="mailto:mattalbright@yahoo.com">Matthew
Albright</a>
> * @author <a href="mailto:jsdever@apache.org">Jeff Dever</a>
> *
> * @since 2.0
> */
> public abstract class Part {
>
> static String boundary =
"----------------314159265358979323846";
> static byte[] boundary_bytes = boundary.getBytes();
> static String CRLF = "\r\n";
> static byte[] CRLF_bytes = CRLF.getBytes();
> static String extra = "--";
> static byte[] extra_bytes = extra.getBytes();
>
> public static String getBoundary() {
> return boundary;
> }
>
> public static void sendLastBoundary(OutputStream out)
> throws IOException {
> out.write(extra_bytes);
> out.write(boundary_bytes);
> out.write(extra_bytes);
> out.write(CRLF_bytes);
> }
>
> public static int lengthOfLastBoundary()
> throws IOException {
> ByteArrayOutputStream out = new ByteArrayOutputStream();
>
> sendLastBoundary(out);
>
> return(out.size());
> }
>
> public abstract String getName();
>
> protected void sendStart(OutputStream out)
> throws IOException {
> out.write(extra_bytes);
> out.write(boundary_bytes);
> out.write(CRLF_bytes);
> }
>
> protected int lengthOfStart()
> throws IOException {
> ByteArrayOutputStream out = new ByteArrayOutputStream();
> sendStart(out);
> return(out.size());
> }
>
> protected void sendHeader(OutputStream out)
> throws IOException {
> String content_dispos = "Content-Disposition: form-data;
> name=\""
> + getName() + "\"";
>
> out.write(content_dispos.getBytes());
> }
>
> protected int lengthOfHeader()
> throws IOException {
> ByteArrayOutputStream out = new ByteArrayOutputStream();
> sendHeader(out);
> return(out.size());
> }
>
>
> protected void sendEndOfHeader(OutputStream out)
> throws IOException {
> out.write(CRLF_bytes);
> out.write(CRLF_bytes);
> }
>
> protected int lengthOfEndOfHeader()
> throws IOException {
> ByteArrayOutputStream out = new ByteArrayOutputStream();
> sendEndOfHeader(out);
> return out.size();
> }
>
>
> protected abstract void sendData(OutputStream out) throws
> IOException;
>
> protected abstract long lengthOfData() throws IOException;
>
> protected void sendEnd(OutputStream out)
> throws IOException {
> out.write(CRLF_bytes);
> }
>
> protected int lengthOfEnd()
> throws IOException {
> ByteArrayOutputStream out = new ByteArrayOutputStream();
> sendEnd(out);
> return out.size();
> }
>
> /* The following 2 methods don't need to be final, but they DO
need
> * to be overridden as a pair, and the only way to make sure of
that
> * is to make sure they AREN'T overridden.
> */
>
> final public void send(OutputStream out) throws IOException {
> sendStart(out);
> sendHeader(out);
> sendEndOfHeader(out);
> sendData(out);
> sendEnd(out);
> }
>
> final public long length() throws IOException {
> return lengthOfStart() +
> lengthOfHeader() +
> lengthOfEndOfHeader() +
> lengthOfData() +
> lengthOfEnd();
> }
> }
>
>
>
> 1.1 jakarta-
>
commons/httpclient/src/java/org/apache/commons/httpclient/methods/multip
ar
> t/StringPart.java
>
> Index: StringPart.java
> ===================================================================
> /*
> * $Header: /home/cvs/jakarta-
>
commons/httpclient/src/java/org/apache/commons/httpclient/methods/multip
ar
> t/StringPart.java,v 1.1 2002/10/01 19:13:41 jsdever Exp $
> * $Revision: 1.1 $
> * $Date: 2002/10/01 19:13:41 $
> *
====================================================================
> *
> * The Apache Software License, Version 1.1
> *
> * Copyright (c) 2002 The Apache Software Foundation. All rights
> * reserved.
> *
> * Redistribution and use in source and binary forms, with or
without
> * modification, are permitted provided that the following
conditions
> * are met:
> *
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> *
> * 2. Redistributions in binary form must reproduce the above
copyright
> * notice, this list of conditions and the following disclaimer
in
> * the documentation and/or other materials provided with the
> * distribution.
> *
> * 3. The end-user documentation included with the redistribution,
if
> * any, must include the following acknowlegement:
> * "This product includes software developed by the
> * Apache Software Foundation (http://www.apache.org/)."
> * Alternately, this acknowlegement may appear in the software
> itself,
> * if and wherever such third-party acknowlegements normally
appear.
> *
> * 4. The names "The Jakarta Project", "HttpClient", and "Apache
> Software
> * Foundation" must not be used to endorse or promote products
> derived
> * from this software without prior written permission. For
written
> * permission, please contact apache@apache.org.
> *
> * 5. Products derived from this software may not be called "Apache"
> * nor may "Apache" appear in their names without prior written
> * permission of the Apache Group.
> *
> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND
> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY,
> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT
> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF
> * SUCH DAMAGE.
> *
====================================================================
> *
> * This software consists of voluntary contributions made by many
> * individuals on behalf of the Apache Software Foundation. For
more
> * information on the Apache Software Foundation, please see
> * <http://www.apache.org/>.
> *
> * [Additional notices, if required by prior licensing conditions]
> *
> */
>
> package org.apache.commons.httpclient.methods.multipart;
>
> import java.io.OutputStream;
> import java.io.IOException;
>
> /**
> * Simple string parameter for a multipart post
> *
> * @author <a href="mailto:mattalbright@yahoo.com">Matthew
Albright</a>
> * @author <a href="mailto:jsdever@apache.org">Jeff Dever</a>
> *
> * @since 2.0
> */
> public class StringPart extends Part
> {
> private String name;
> private String value;
>
> /**
> * @param name
> * @param value the string to post
> */
> public StringPart(String name, String value) {
> this.name = name;
> this.value = value;
> }
>
> public String getName() {
> return name;
> }
>
> protected void sendData(OutputStream out)
> throws IOException {
> out.write(value.getBytes());
> }
>
> protected long lengthOfData()
> throws IOException {
> return value.getBytes().length;
> }
> }
>
>
>
>
> --
> To unsubscribe, e-mail: <mailto:commons-dev-
> unsubscribe@jakarta.apache.org>
> For additional commands, e-mail: <mailto:commons-dev-
> help@jakarta.apache.org>
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>