Cara Upload File Dan Form di Android Menggunakan OkHttp

Beberapa tahun yang lalu saya sudah pernah menuliskan tutorial yang sama. Saat itu, belum banyak library HTTP yang sangat memudahkan developer. Sekian tahun kemudian, saat ini, banyak sekali library, wrapper, framework yang sangat memudahkan developer android dalam membuat aplikasi. Tulisan kali ini saya ingin membagikan bagaimana cara kita melakukan upload file dan data dengan menggunakan OkHttp.

Langsung saja. Kalau anda belum menambahkan OkHttp ke project, silahkan ditambahkan terlebih dahulu. Setelah itu, silahkan ikuti langkah2 berikut:

Inisialisasi file

Pertama, inisialisasi file yang ingin diupload. Darimana file ini? terserah anda, yang dibutuhkan hanya object File dengan kondisi file tersebut benar2 ada di system.

File file1 = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/Master/CAM_" + s.getType() + "_" + s.getJobCode() + ".jpg");
File file2 = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/Master/SIGN_" + s.getType() + "_" + s.getJobCode() + ".jpg");

Log.d("LOG", "File1: "+ (file1.exists() ? "E" : "N") + " -> " + file1.getAbsolutePath());
Log.d("LOG", "File2: "+ (file2.exists() ? "E" : "N") + " -> " + file2.getAbsolutePath());

Buat RequestBody

Selanjutnya buat object RequestBody dengan syntax sebagai berikut:

RequestBody requestBody = new MultipartBuilder()
        .type(MultipartBuilder.FORM)
        .addFormDataPart("gambar1", file1.getName(),
                RequestBody.create(MEDIA_TYPE_IMAGE, file1))
        .addFormDataPart("gambar2", file2.getName(),
                RequestBody.create(MEDIA_TYPE_IMAGE, file2))
        .addFormDataPart("job", s.getJobCode())
        .addFormDataPart("auth", dp.getLoginAuth())
        .addFormDataPart("catatan", s.getCatatan())
        .addFormDataPart("rate", String.valueOf(s.getRate()))
        .build();

Ada 3 bagian penting dari kode di atas, diantaranya:

  • RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
    Kode di atas menandakan kita membuat object RequestBody dari install class MultipartBuilder() dengan type form. Seperti kalau bikin HTML <form enctype="multipart/form-data">
  • .addFormDataPart("gambar1", file1.getName(), RequestBody.create(MEDIA_TYPE_IMAGE, file1))
    Yang ini adalah bagian dimana kita meletakkan parameter file yang akan diupload
  • .addFormDataPart("catatan", s.getCatatan())
    Yang terakhir ini untuk menambahkan parameter biasa (semacam text, radio button, dll)

Melakukan HTTP Request

Bagian terakhir dan yang paling utama adalah melakukan request ke server dan mengambil hasilnya. Kodenya seperti ini:

Request request = new Request.Builder().url(URL_UPLOAD_SIGNATURE).post(requestBody).build();
Response response = client.newCall(request).execute();
Log.d("LOG", s.getType() + " Resonse: " + response.body().string());

Author: Arief Bayu Purwanto

Hello, my name is Arief Bayu Purwanto, a 24 years old father of a beautiful daughter. Interested in online programming, linux, games, and reading. Currently working on kapanlagi.com as junior developer. I live in a relatively quite and cool place called Malang. I'm available for some freelance stuff as well as some consulting job. You can see my portofolio for some previous task I've finished and some other information related to my capability. Btw, I'm plurking here.