0 Replies Latest reply: Nov 24, 2009 9:26 AM by 807567 RSS

    feasibility of using fileupload apache api without boundary

    807567
      hi all,
      i am using file upload api for io operation to download files on server using multipart/form-data.
      link given below:-
      http://commons.apache.org/fileupload

      If we are using normal html file for upload no issue, browser takes care of "boundary"...

      but if we write core java app to connect to filedownload app, we need to set "boundary" manually...
      I have set boundary manually,it works.But it does not work without boundary.

      is it possible to download files without boundary?
      is there any other api which can do it?

      if I remove boundary from code it gives me error:
      org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

      my html code being used to connect to filedownload app:-
      -----------------------------
      <html>
      <head>
      <script language="JavaScript">
      function show(){}
      </script>
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
      <title>Insert title here</title>
      </head>
      <body>
      <form AUTOCOMPLETE="off" name="addFiles" method="post" action="https://tpslvl0109:8443/FileDownload/pushFile" enctype="multipart/form-data">
      username:<input type=text name=username id=username value="myusername"><br>
      password:<input type=password name=password id=password value="mypassword"><br>
      Input file1:<input name="inputfile1" type="file" id="inputfile1" size="55"><br>
      <input type=submit name=submit value=submit onClick="show()" >
      </form></body></html>
      -----------------------------
      my core java client app used to connect to same filedownload app
      ---------------------------------
      import java.io.DataOutputStream;
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.InputStream;
      import java.io.InputStreamReader;
      import java.io.Reader;
      import java.net.HttpURLConnection;
      import java.net.URL;
      import javax.net.ssl.HostnameVerifier;
      import javax.net.ssl.HttpsURLConnection;
      import javax.net.ssl.SSLContext;
      import javax.net.ssl.SSLSession;
      import javax.net.ssl.TrustManager;
      import javax.net.ssl.X509TrustManager;

      public class connect implements HostnameVerifier{
      public connect(){}
      public void try_connect(){
      try {
           String boundary = "*****";
      System.setProperty( "java.protocol.handler.pkgs" , "javax.net.ssl" );
      java.security.Security.addProvider( new com.sun.net.ssl.internal.ssl.Provider() );
      TrustManager[] trustAllCerts = new TrustManager[] {
      new X509TrustManager(){
      public java.security.cert.X509Certificate[] getAcceptedIssuers(){
      return null;
      }
      public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType ) { }
      public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType ) { }
      }
      };
      SSLContext sc = SSLContext.getInstance( "SSL" );
      sc.init( null, trustAllCerts, new java.security.SecureRandom() );
      HttpsURLConnection.setDefaultSSLSocketFactory( sc.getSocketFactory() );
      URL url = new URL("https", "tpslvl0109", 8443, "/FileDownload/pushFile");
      System.out.println(url.getQuery());
      HttpsURLConnection m_oHttpURLConnection = (HttpsURLConnection) url.openConnection();
      m_oHttpURLConnection.setDoInput( true );
      m_oHttpURLConnection.setDoOutput( true );
      m_oHttpURLConnection.setUseCaches( false );
      m_oHttpURLConnection.setRequestProperty("Connection", "Keep-Alive");
      m_oHttpURLConnection.setRequestProperty( "Content-Type", "multipart/form-data;boundary="+boundary );
      m_oHttpURLConnection.setAllowUserInteraction( true );
      m_oHttpURLConnection.setRequestMethod("POST");
      m_oHttpURLConnection.setInstanceFollowRedirects( true );
      ( ( HttpsURLConnection )( m_oHttpURLConnection ) ).setHostnameVerifier( this );

      m_oHttpURLConnection.connect();
      DataOutputStream dos = null;
           String exsistingFileName = "D:\\projects\\104-FileDownload\\TestFilefrom.txt";
      String lineEnd = "\r\n";
      String twoHyphens = "--";
           dos = new DataOutputStream( m_oHttpURLConnection.getOutputStream() );
      dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: form-data; name=username ; " + lineEnd );
                dos.writeBytes(lineEnd);
                dos.writeBytes("myusername");
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: form-data; name=password ; " + lineEnd );
                dos.writeBytes(lineEnd);
                dos.writeBytes("mypassword");
                dos.writeBytes(lineEnd);

                dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: form-data; name=\"upload\";"
                + " filename=\"" + exsistingFileName +"\"" + lineEnd );
                dos.writeBytes(lineEnd);
                FileInputStream fileInputStream = new FileInputStream( new
                          File(exsistingFileName) );
                int bytesRead, bytesAvailable, bufferSize;
                     byte[] buffer;int maxBufferSize = 1*1024*1024;
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                buffer = new byte[bufferSize];
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                while (bytesRead > 0)
                {
                dos.write(buffer, 0, bufferSize);
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                }
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                fileInputStream.close();
                dos.flush();
                dos.close();
      System.out.println("It's Connected");
      InputStream is = m_oHttpURLConnection.getInputStream ( ) ;
      if ( is == null ) { 
      throw new Exception ( "Got a null content object!" ) ;
      }
      StringBuffer putBackTogether = new StringBuffer ( ) ;
      Reader r = new InputStreamReader ( is, "UTF-8" ) ;
      char [  ] cb = new char [ 2048 ] ;
      int amtRead = r.read ( cb ) ;
      while ( amtRead > 0 ) { 
      putBackTogether.append ( cb, 0, amtRead ) ;
      amtRead = r.read ( cb ) ;
      }
      String pageSource = putBackTogether.toString ( ) ;
      System.out.println(pageSource);
      } catch (Exception e){
      e.printStackTrace();
      }
      }

      public boolean verify(String hostname, SSLSession session) {
      return true;
      }
      public static void main(String[] args) {
                try{connect c=new connect();
                c.try_connect();}catch(Exception e){
                     e.printStackTrace(System.out);
      }}          }
      ---------------------------------