2

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!

Casey
  • 12,070
  • 18
  • 71
  • 107
mithu
  • 177
  • 1
  • 6
  • 16
  • The title is misleading, but the question itself was clear on trying to implement the *server* side in Java, not the client. The currently linked duplicate describes client-implementations. – Gergely Bacso Feb 03 '16 at 15:06
  • You are misusing `available()`, and you don't need to use it at all here. – user207421 Apr 22 '19 at 23:46

1 Answers1

1

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.

Gergely Bacso
  • 14,243
  • 2
  • 44
  • 64
  • 1
    This won't work. Commons File Upload is for the server and not client. – Michael-O Aug 23 '15 at 20:11
  • The question reads: *"I have added the client side coding here. But, i don't have any idea with the server side processing."* – Gergely Bacso Aug 24 '15 at 04:41
  • @GergelyBasco, the question is unclear if you read the title. The real question has been reduced to one sentence. Thanks for the pointer. – Michael-O Aug 24 '15 at 07:13