Getting 500 internal server error in discourse API when trying to upload file in java

I am using Discourse API to upload an image. here is the java code that i use to upload file

import java.net.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.*;
import java.io.*;

public class Upload {
  private final static String BASE_URL = "http://localhost:4200";
  private final static String API_KEY = "958543d9f5d4df2c2739b8f9156cbd18759d192d435fb4d2c08e5f61fdf3b699";
  static String boundary = "WebKitFormBoundary7MA4YWxkTrZu0gW";

private static final String LINE_FEED = "\r\n";
	public static void main(String[] args) {
    try {
		URL url = new URL(BASE_URL + "/uploads.json");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");
    httpConn.setDoOutput(true);
		httpConn.setRequestProperty("api-key", API_KEY);
		httpConn.setRequestProperty("api-username", "devarshmavani19");
		httpConn.setRequestProperty("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
		OutputStream outputStream = new DataOutputStream(System.out);//httpConn.getOutputStream();
		PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream));
		addFormField("type", "image", writer);
		addFormField("synchronous", "true", writer);
		addFilePart("file", new File("/home/devarsh/Desktop/small.jpeg"), "", writer, outputStream);
    String response = finish(writer, httpConn, outputStream);
    System.out.println(response);
    } 
    catch(Exception e ) {e.printStackTrace();}
	}

	public static void addFormField(String name, String value, PrintWriter writer) {
      writer.append("----" + boundary).append(LINE_FEED);
      writer.append("Content-Disposition: form-data; name=" + name + "")
      .append(LINE_FEED);
      
      writer.append("Content-Type: text/plain; charset=US-ASCII").append(
        LINE_FEED);
      writer.append(LINE_FEED);
      writer.append(value).append(LINE_FEED);
      writer.flush();
  }

  public static void addFilePart(String fieldName, File file, String name, PrintWriter writer, OutputStream outputStream)
    throws IOException {
    writer.append("----" + boundary).append(LINE_FEED);
    writer.append(
    "Content-Disposition: form-data; name=" + fieldName
    + "; filename=" + file.getName() + "")
    .append(LINE_FEED);
    writer.append(
                "Content-Type: "
                        + URLConnection.guessContentTypeFromName(file.getName()))
                .append(LINE_FEED);
    writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
    writer.append(LINE_FEED);
    writer.flush();

		FileInputStream inputStream = new FileInputStream(file);
    byte[] buffer = new byte[4096];
		int bytesRead;
		while ((bytesRead = inputStream.read(buffer)) != -1) {
      outputStream.write(buffer, 0, bytesRead);
    }
    inputStream.close();
    outputStream.flush();
    writer.append(LINE_FEED);
    writer.flush();
  }

  public static String finish(PrintWriter writer, HttpURLConnection httpConn, OutputStream stream) throws IOException {
    String line = null;
    writer.append(LINE_FEED).flush();
    writer.append("----" + boundary + "--").append(LINE_FEED);
    writer.close();
    stream.close();

    // checks server's status code first
    int status = httpConn.getResponseCode();
    if (status == HttpURLConnection.HTTP_OK) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                httpConn.getInputStream()));
        while ((line += reader.readLine()) != null) {
        }
        reader.close();
        httpConn.disconnect();
    } else {
        throw new IOException("PRINTING " + httpConn.getResponseMessage() + " " + httpConn.getResponseCode() + " "); //prints 500 internal server error
    }

    return line;
  }
}

when i try to upload image using node js it works perfectly. and also i tested using postman and it works perfectly as well. But for some reason there is something i missed in java.

here are server log

Started POST "/uploads.json" for 127.0.0.1 at 2022-06-17 18:23:43 +0530
Processing by UploadsController#create as JSON
Completed 500 Internal Server Error in 0ms (ActiveRecord: 0.0ms | Allocations: 157)


EOFError (EOFError)
lib/auth/default_current_user_provider.rb:127:in `current_user'
lib/current_user.rb:36:in `current_user'
app/controllers/application_controller.rb:976:in `rate_limit_crawlers'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/missing_avatars.rb:23:in `call'
lib/middleware/turbo_dev.rb:34:in `call'
  Rendering layout /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/layout.erb
  Rendering /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
  Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb (Duration: 0.8ms | Allocations: 382)
  Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb (Duration: 0.4ms | Allocations: 186)
  Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (Duration: 3.3ms | Allocations: 3201)
  Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (Duration: 2.1ms | Allocations: 2119)
  Rendering /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (Duration: 1.0ms | Allocations: 459)
  Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (Duration: 18.1ms | Allocations: 9875)
  Rendered layout /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/layout.erb (Duration: 20.4ms | Allocations: 10943)

Please guide me how can i make it work using java.net package

any help will be appreciated

Edit: I am also attaching node js code that worked

var fs = require("fs");
var request = require("request");

fs.readFile("/home/devarsh/Desktop/small2.jpeg", function(e, data) {
    console.log(data, e)
    var options = { method: 'POST',
      url: 'http://localhost:4200/uploads.json',
      headers: 
       { 
         'api-username': 'tester',
         'api-key': '3772adba123b1db43f4d3644382b97a5ba9b6cdfdb796e25341dc796c402638e',
         'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW',
        },
      formData: 
       { type: 'image',
         synchronous: 'true',
         file: 
          { value: data,
            options: { filename: 'small2.jpeg', contentType: "image/png", } } } };
    
    request(options, function (error, response, body) {
      if (error) throw new Error(error);
        
      console.log(body, response.body, error);
    });
    
})