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
>
>