I would recommend that you use something like Commons HttpClient to
construct and make the request, instead of trying to do so manually, as you
are now. See:

http://jakarta.apache.org/commons/httpclient/

You might also want to use Commons FileUpload to parse the request, instead
of the O'Reilly package, so that you don't get tangled up in the strange
licensing conditions of the O'Reilly package. See:

http://jakarta.apache.org/commons/fileupload/

--
Martin Cooper


On 12/27/05, Lamberto Altieri <[EMAIL PROTECTED]> wrote:
>
> Hi there,
> I have a problem!
> I must send a post multipart/form-data message from an applet to a
> servlet,
> I wrote this piece of code:
>
> try{
>    // Create a socket to the host
>    String hostname="localhost";
>    int port=8080;
>    InetAddress addr=InetAddress.getByName(hostname);
>    Socket socket=new Socket(hostname,port);
>    // Construct data
>    String dataA="------AaB03x\r\n",
>           dataB="Content-Disposition: form-data; name=\"submitter\"\r\n",
>           dataC="\r\n",
>           dataD="Larry\r\n",
>           dataE="------AaB03x\r\n",
>           dataF="Content-Disposition: form-data; name=\"files\";
> filename=\"file1.txt\"\r\n",
>           dataG="Content-Type: text/plain\r\n",
>           dataH="\r\n",
>           dataI="... contents of file1.txt ...\r\n",
>           dataL="------AaB03x--\r\n";
>    int len=dataA.length()+
>            dataB.length()+
>            dataC.length()+
>            dataD.length()+
>            dataE.length()+
>            dataF.length()+
>            dataG.length()+
>            dataH.length()+
>            dataI.length()+
>            dataL.length();
>
>    // Send header
>    String path="/upload/requestupload";
>    BufferedWriter wr=new BufferedWriter(new OutputStreamWriter(
> socket.getOutputStream()));
>    wr.write("POST "+path+" HTTP/1.0\r\n");
>    wr.write("Content-Length: "+len+"\r\n");
>    wr.write("Content-Type: multipart/form-data;
> boundary=------AaB03x\r\n");
>    wr.write("\r\n");
>    // Send data
>    wr.write(dataA);
>    wr.write(dataB);
>    wr.write(dataC);
>    wr.write(dataD);
>    wr.write(dataE);
>    wr.write(dataF);
>    wr.write(dataG);
>    wr.write(dataH);
>    wr.write(dataI);
>    wr.write(dataL);
>    wr.flush();
>
>    // Get response
>    BufferedReader rd=new BufferedReader(new InputStreamReader(
> socket.getInputStream()));
>    String line;
>    while((line=rd.readLine())!=null)
>        System.out.println(line);
>    wr.close();
>    rd.close();
>    socket.close();
> }
> catch(Exception e) {e.printStackTrace();}
>
> but this kind of error is thrown by tomcat 5.5:
>
> 24-dic-2005 1.45.27 org.apache.catalina.core.ApplicationContext log
> GRAVE: error reading or saving file
> java.io.IOException: Corrupt form data: premature ending
>     at com.oreilly.servlet.multipart.MultipartParser.<init>(
> MultipartParser.java:205)
>     at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java
> :222)
>     at DemoRequestUploadServlet.doPost(DemoRequestUploadServlet.java:80)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:252)
>     at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
>     at org.apache.catalina.core.StandardWrapperValve.invoke(
> StandardWrapperValve.java:213)
>     at org.apache.catalina.core.StandardContextValve.invoke(
> StandardContextValve.java:178)
>     at org.apache.catalina.core.StandardHostValve.invoke(
> StandardHostValve.java:126)
>     at org.apache.catalina.valves.ErrorReportValve.invoke(
> ErrorReportValve.java:105)
>     at org.apache.catalina.core.StandardEngineValve.invoke(
> StandardEngineValve.java:107)
>     at org.apache.catalina.connector.CoyoteAdapter.service(
> CoyoteAdapter.java:148)
>     at org.apache.coyote.http11.Http11Processor.process(
> Http11Processor.java:856)
>     at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection
> (Http11Protocol.java:744)
>     at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
> PoolTcpEndpoint.java:527)
>     at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(
> LeaderFollowerWorkerThread.java:80)
>     at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
> ThreadPool.java:684)
>     at java.lang.Thread.run(Unknown Source)
>
>
> I use cos.jar crated by o'reilly for reading the multipart/form-data
> message.
> Is this an encoding problem? Can you help me?
> If you need further info.....
>
> Thanks
> Yours,
> Lamberto Altieri
>
>

Reply via email to