How to handle Server side HTTP file upload from Java client

13,288

The best library to achieve this is still the Apache Commons File Upload. It is well documented and easy to use. If you ran into any issues, please check FAQ first.

Share:
13,288
mithu
Author by

mithu

Updated on June 04, 2022

Comments

  • mithu
    mithu almost 2 years

    I want to upload a file from a client to a server.

    Client: Java using HTTP post Server: Java Servlet

    I have added the client side coding here. But, i don't have any idea with the server side processing. Please do help me with a code snippet.

     private String Tag = "UPLOADER";
        private String urlString = "http://192.168.42.140:8080/sampweb";
        HttpURLConnection conn;
        String exsistingFileName = "/sdcard/log.txt";
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        try {
            // ------------------ CLIENT REQUEST
    
            Log.e(Tag, "Inside second Method");
    
            FileInputStream fileInputStream = new FileInputStream(new File(
                    exsistingFileName));
    
            // open a URL connection to the Servlet
    
            URL url = new URL(urlString);
    
            // Open a HTTP connection to the URL
    
            conn = (HttpURLConnection) url.openConnection();
    
            // Allow Inputs
            conn.setDoInput(true);
    
            // Allow Outputs
            conn.setDoOutput(true);
    
            // Don't use a cached copy.
            conn.setUseCaches(false);
    
            // Use a post method.
            conn.setRequestMethod("POST");
    
            conn.setRequestProperty("Connection", "Keep-Alive");
    
            conn.setRequestProperty("Content-Type",
                    "multipart/form-data;boundary=" + boundary);
    
            DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
    
            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos
                    .writeBytes("Content-Disposition: post-data; name=uploadedfile;filename="
                            + exsistingFileName + "" + lineEnd);
            dos.writeBytes(lineEnd);
    
            Log.e(Tag, "Headers are written");
    
            // create a buffer of maximum size
    
            int bytesAvailable = fileInputStream.available();
            int maxBufferSize = 1000;
            // int bufferSize = Math.min(bytesAvailable, maxBufferSize);
            byte[] buffer = new byte[bytesAvailable];
    
            // read file and write it into form...
    
            int bytesRead = fileInputStream.read(buffer, 0, bytesAvailable);
    
            while (bytesRead > 0) {
                dos.write(buffer, 0, bytesAvailable);
                bytesAvailable = fileInputStream.available();
                bytesAvailable = Math.min(bytesAvailable, maxBufferSize);
                bytesRead = fileInputStream.read(buffer, 0, bytesAvailable);
            }
    
            // send multipart form data necessary after file data...
    
            dos.writeBytes(lineEnd);
            dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
    
            // close streams
            Log.e(Tag, "File is written");
            fileInputStream.close();
            dos.flush();
            dos.close();
    
        } catch (MalformedURLException ex) {
            Log.e(Tag, "error: " + ex.getMessage(), ex);
        }
    
        catch (IOException ioe) {
            Log.e(Tag, "error: " + ioe.getMessage(), ioe);
        }
    
        try {
            BufferedReader rd = new BufferedReader(new InputStreamReader(conn
                    .getInputStream()));
            String line;
            while ((line = rd.readLine()) != null) {
                Log.e("Dialoge Box", "Message: " + line);
            }
            rd.close();
    
        } catch (IOException ioex) {
            Log.e("MediaPlayer", "error: " + ioex.getMessage(), ioex);
        }
    }
    

    I'm new to the server programming. If i have done any mistakes do clarify me. Thanks!