You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@jakarta.apache.org by Lamberto Altieri <la...@inwind.it> on 2005/12/27 17:57:37 UTC

multipart/form-java

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

Re: multipart/form-java

Posted by Martin Cooper <ma...@apache.org>.
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 <la...@inwind.it> 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
>
>