Upload file dengan Volley Android

Sebenernya aku baru se pake library Volley, aku sebelumnya cuma pake Http Apache tapi karena di API Android yang baru udah deprecated dan mau dihapus aku cari alternatif, yah sebenernya tetep bisa se kita import di gradle dependency legacy nya apache tapi ndak wes, aku ndak tau masalah teknis nya tapi aku yakin ada pengganti nya. Aku sudah tau Volley lama pas aku masih Apache Http tapi baru sekarang nyoba. Aku lihat kalo Twitter pake OKHttp dari Square untuk Http librarynya, tapi rasanya masih terlalu berat buat aku, terus ada library turunannya Retrofit rasanya menjanjikan tapi entah kenapa kayaknya masih terbiasa pake model AsyncTask dan Volley mirip dengan itu.

Pertama pake sih oke dan rasanya gampang banget daripada AsyncTask, tapi masalah terjadi ketika aku pengen upload gambar, gimana nih buat ngirim Multipart data, bingung seharian searching sana sini, tapi tetep fokus di Stack Overflow, jawabannya selalu mengarah ke custom request, yah setelah tak liat struktur kelasnya memang Volley punya kelas Request yang diturunkan jadi StringRequest, JSONObjectRequest, JSONArrayRequest, sebenernya turunannya ndak banyak tambahan kodenya, kalo JSONObjectRequest atau JSONArrayRequest itu pre-parse kembalian dari server (response) bentuk Json Object atau Json Array, sama aja semua bisa di handle pake StringRequest. Nah akhirnya aku bikin kelas cutom request yang isinya melakukan build header dari multipart form, aku tahu formatnya dari Chrome App Advanced REST client

Perhatikan form header untuk application/x-www-form-urlencoded (form biasa) post data username dan password:

POST /api/account/login HTTP/1.1
 HOST: infogue.id
 content-type: application/x-www-form-urlencoded
 cookie: infogue-visitor=202.67.40.5
 content-length: 43
 
 username=anggadarkprince&password=angga1234

 

Dan ini untuk Multipart data (upload file) post username, password dan gambar:

POST /api/account/login HTTP/1.1
 HOST: infogue.id
 content-type: multipart/form-data; boundary=----WebKitFormBoundaryEqbYeWvpMnfHmBlV
 cookie: XSRF-TOKEN=eyJpdiI6InZIdjcyN0MrMm1sUkNvNzVENXB2RUE9PSIsInZhbHVlIjoicmFZNmxXZ09HSTNcL01oMWdieTVoOWkzM1hHazd0VWRXazJaZVJwWDNIdmFKK0dTNTdjdFVJcTRCUFFyalwvZEZsNWR4eCtFQXl3YUU3ZklwUGxjdVE1UT09IiwibWFjIjoiZTIxODMzMGY5NDFkZTc3ZDE4ZmUzMWE0NjNjNzBlZjVlMDFiYjk1Yzk5OGUwNTUxMmJiMjAwNzlkMTg1YjgzMSJ9; infogue_session=eyJpdiI6Ik1pK0tYTGVhREZWT0d2c3RPcjdPaHc9PSIsInZhbHVlIjoiR2RpV04xbUJ2cTVlQ2VtTnBFUytQanhBenJmcmsxd2lLMzNMS1ZIVGR0VDNQc1AzZjBhTlc0QkFyM0wrc0xqTEQ4bnRYMHVHYUZiWSs1a3VGSlZjMFE9PSIsIm1hYyI6IjQ4MGQ5NjVkMWM1ZjMxYTExNmYxODZjZTJlNDMxMDNmNDY1MjZiZWFiYjYxZDU2N2VjNzRlMGFmYzI4NjE1ZmEifQ==; infogue-visitor=202.67.40.5
 content-length: 581

------WebKitFormBoundaryXNNliH8s8TVLWSWC
 Content-Disposition: form-data; name="fileUpload"; filename="angga.PNG"
 Content-Type: image/png
 
 ‰PNG  
IHDRN¸«©grsRGB®ÎégAMA±üapHYsÃÃÇo¨dÿ¥IDATx^ì½ý\eÿß...

------WebKitFormBoundaryXNNliH8s8TVLWSWC
 Content-Disposition: form-data; name="username"
 anggadarkprince
 ------WebKitFormBoundaryXNNliH8s8TVLWSWC
 Content-Disposition: form-data; name="password" 
 angga1234
 ------WebKitFormBoundaryXNNliH8s8TVLWSWC--

Nah pada dasarnya header ini cuma string yang punya format tertentu kemudian diconvert jadi byte array agar bisa dikirim lewat stream melalui network pake Volley, aku gak bahas lebih jauh tentang header dari sebuah request. Langsung aja kita bikin codingnya, yah aku nulis di Gist, jadi tinggal embed aja, atau kunjungi Gist nya disini dan akun Github-ku disini. Insya Allah works, kalian bisa liat komentar di gist ku. Keliatan codingnya banyak tapi ndak kok, yang paling penting adalah kelas VolleyMultipartRequest.java dan lihat cara pakainya di MainActivity.java semoga bermanfaat.

Thanks for giving me feedback and revision. – Angga Ari Wijaya

2 pemikiran pada “Upload file dengan Volley Android

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s