23

i want to upload image using okhttp but i am not able to find MultipartBuilder for Post Image.What can i use instead of this.

Here is my code

 public static JSONObject uploadImage(File file) { try { final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); RequestBody req = new MultipartBuilder().setType(MultipartBody.FORM) .addFormDataPart("userid", "8457851245") .addFormDataPart( "userfile", "profile.png", RequestBody.create(MEDIA_TYPE_PNG, file) ) .build(); Request request = new Request.Builder() .url("url") .post(req) .build(); OkHttpClient client = new OkHttpClient(); Response response = client.newCall(request).execute(); Log.d("response", "uploadImage:" + response.body().string()); return new JSONObject(response.body().string()); } catch (UnknownHostException | UnsupportedEncodingException e) { Log.e(TAG, "Error: " + e.getLocalizedMessage()); } catch (Exception e) { Log.e(TAG, "Other Error: " + e.getLocalizedMessage()); } return null; } 

Thanks in advance.

4 Answers 4

13

You need to Use

new MultipartBody.Builder() 

Instead of

new MultipartBuilder() 

Its working

Sign up to request clarification or add additional context in comments.

1 Comment

any idea about my question, have a similar issue and its up for bounty : stackoverflow.com/questions/57598276/…
8

Here is the multi part request class.

import java.io.File; import java.io.IOException; import org.apache.http.HttpStatus; import android.content.Context; import com.esp.ro.util.Config; import com.esp.ro.util.Log; import com.squareup.okhttp.MediaType; import com.squareup.okhttp.MultipartBuilder; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.RequestBody; import com.squareup.okhttp.Response; public class MultipartRequest { public Context caller; public MultipartBuilder builder; private OkHttpClient client; public MultipartRequest(Context caller) { this.caller = caller; this.builder = new MultipartBuilder(); this.builder.type(MultipartBuilder.FORM); this.client = new OkHttpClient(); } public void addString(String name, String value) { this.builder.addFormDataPart(name, value); } public void addFile(String name, String filePath, String fileName) { this.builder.addFormDataPart(name, fileName, RequestBody.create( MediaType.parse("image/jpeg"), new File(filePath))); } public void addTXTFile(String name, String filePath, String fileName) { this.builder.addFormDataPart(name, fileName, RequestBody.create( MediaType.parse("text/plain"), new File(filePath))); } public void addZipFile(String name, String filePath, String fileName) { this.builder.addFormDataPart(name, fileName, RequestBody.create( MediaType.parse("application/zip"), new File(filePath))); } public String execute(String url) { RequestBody requestBody = null; Request request = null; Response response = null; int code = 200; String strResponse = null; try { requestBody = this.builder.build(); request = new Request.Builder().header("AUTH-KEY", Config.API_KEY) .url(url).post(requestBody).build(); Log.print("::::::: REQ :: " + request); response = client.newCall(request).execute(); Log.print("::::::: response :: " + response); if (!response.isSuccessful()) throw new IOException(); code = response.networkResponse().code(); if (response.isSuccessful()) { strResponse = response.body().string(); } else if (code == HttpStatus.SC_NOT_FOUND) { // ** "Invalid URL or Server not available, please try again" */ strResponse = caller.getResources().getString( R.string.error_invalid_URL); } else if (code == HttpStatus.SC_REQUEST_TIMEOUT) { // * "Connection timeout, please try again", */ strResponse = caller.getResources().getString( R.string.error_timeout); } else if (code == HttpStatus.SC_SERVICE_UNAVAILABLE) { // * // "Invalid URL or Server is not responding, please try again", // */ strResponse = caller.getResources().getString( R.string.error_server_not_responding); } } catch (Exception e) { Log.error("Exception", e); Log.print(e); } finally { requestBody = null; request = null; response = null; builder = null; if (client != null) client = null; System.gc(); } return strResponse; } } 

Hope this help you.

Note : If you are using old OkHttp which is below version 3 then you can use this method.If you are using version 3 or above here is the answer for you.

Comments

6

I used this way in OKHTTP 3.4.1

Call function like this

if (!realPath.equals("")) { new SignupWithImageTask().execute(et_name.getText().toString(), et_email.getText().toString(), et_dob.getText().toString(), IMEI, et_mobile.getText().toString(), realPath); } else { Toast.makeText(this, "Profile Picture not found", Toast.LENGTH_SHORT).show(); } 

SignupWithImageTask

 public class SignupWithImageTask extends AsyncTask<String, Integer, String> { ProgressDialog progressDialog; @Override protected void onPreExecute() { super.onPreExecute(); progressDialog = new ProgressDialog(SignupActivity.this); progressDialog.setMessage("Please Wait...."); progressDialog.show(); } @Override protected String doInBackground(String... str) { String res = null; try { // String ImagePath = str[0]; String name = str[0], email = str[1], dob = str[2], IMEI = str[3], phone = str[4], ImagePath = str[5]; File sourceFile = new File(ImagePath); Log.d("TAG", "File...::::" + sourceFile + " : " + sourceFile.exists()); final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/*"); String filename = ImagePath.substring(ImagePath.lastIndexOf("/") + 1); /** * OKHTTP2 */ // RequestBody requestBody = new MultipartBuilder() // .type(MultipartBuilder.FORM) // .addFormDataPart("member_id", memberId) // .addFormDataPart("file", "profile.png", RequestBody.create(MEDIA_TYPE_PNG, sourceFile)) // .build(); /** * OKHTTP3 */ RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("image", filename, RequestBody.create(MEDIA_TYPE_PNG, sourceFile)) .addFormDataPart("result", "my_image") .addFormDataPart("name", name) .addFormDataPart("email", email) .addFormDataPart("dob", dob) .addFormDataPart("IMEI", IMEI) .addFormDataPart("phone", phone) .build(); Request request = new Request.Builder() .url(BASE_URL + "signup") .post(requestBody) .build(); OkHttpClient client = new OkHttpClient(); okhttp3.Response response = client.newCall(request).execute(); res = response.body().string(); Log.e("TAG", "Response : " + res); return res; } catch (UnknownHostException | UnsupportedEncodingException e) { Log.e("TAG", "Error: " + e.getLocalizedMessage()); } catch (Exception e) { Log.e("TAG", "Other Error: " + e.getLocalizedMessage()); } return res; } @Override protected void onPostExecute(String response) { super.onPostExecute(response); if (progressDialog != null) progressDialog.dismiss(); if (response != null) { try { JSONObject jsonObject = new JSONObject(response); if (jsonObject.getString("message").equals("success")) { JSONObject jsonObject1 = jsonObject.getJSONObject("data"); SharedPreferences settings = getSharedPreferences("preference", 0); // 0 - for private mode SharedPreferences.Editor editor = settings.edit(); editor.putString("name", jsonObject1.getString("name")); editor.putString("userid", jsonObject1.getString("id")); editor.putBoolean("hasLoggedIn", true); editor.apply(); new UploadContactTask().execute(); startActivity(new Intent(SignupActivity.this, MainActivity.class)); } else { Toast.makeText(SignupActivity.this, "" + jsonObject.getString("message"), Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { e.printStackTrace(); } } else { Toast.makeText(SignupActivity.this, "Something Went Wrong", Toast.LENGTH_SHORT).show(); } } } 

Comments

3
OkHttpClient client = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).writeTimeout(180, TimeUnit.SECONDS).readTimeout(180, TimeUnit.SECONDS).build(); RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM) .addFormDataPart("File", path.getName(),RequestBody.create(MediaType.parse("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),path)) .addFormDataPart("username", username) .addFormDataPart("password", password) .build(); Request request = new Request.Builder().url(url).post(body).build(); Response response = client.newCall(request).execute(); result = response.body().string(); 

Click here to know how to receive the data in server for this request

2 Comments

what is path here?
Its file object.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.