Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Upload Photo using HttpPost MultiPartEntityBuilder

Tags:

I am trying to upload the taken photo to server. this is what i do:

public JSONObject makePostFileRequest(String url, String photoFile) {     try {         // photoFile = /path/tofile/pic.jpg         DefaultHttpClient httpClient = GlobalData.httpClient;         HttpPost httpPost = new HttpPost(url);          File file = new File(photoFile);         FileBody fileBody = new FileBody(file); // here is line 221          MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();          multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);         multipartEntity.addPart("PhotoMessage", fileBody);          httpPost.setEntity(multipartEntity.build());          HttpResponse httpResponse = httpClient.execute(httpPost);         HttpEntity httpEntity = httpResponse.getEntity();         is = httpEntity.getContent(); 

I get this error:

11-29 13:12:14.924: E/AndroidRuntime(15781): Caused by: java.lang.NoClassDefFoundError: org.apache.http.entity.ContentType 11-29 13:12:14.924: E/AndroidRuntime(15781): at org.apache.http.entity.mime.content.FileBody.(FileBody.java:89) 11-29 13:12:14.924: E/AndroidRuntime(15781): at com.petcial.petopen.custom.JSONParser.makePostFileRequest(JSONParser.java:221)

What am I doing wrong?


Update

InputStream inputStream; inputStream = new FileInputStream(new File(photoFile)); byte[] data; data = IOUtils.toByteArray(inputStream);  httpClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT,                         System.getProperty("http.agent")); InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data), "Pic.jpg");  MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();  multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntity.addPart("PhotoMessage", inputStreamBody);  httpPost.setEntity(multipartEntity.build());  HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); 

here is the error:

11-29 14:00:33.364: E/AndroidRuntime(19478): Caused by: java.lang.NoClassDefFoundError: org.apache.http.util.Args 11-29 14:00:33.364: E/AndroidRuntime(19478): at org.apache.http.entity.mime.content.AbstractContentBody.(AbstractContentBody.java:48) 11-29 14:00:33.364: E/AndroidRuntime(19478): at org.apache.http.entity.mime.content.InputStreamBody.(InputStreamBody.java:69) 11-29 14:00:33.364: E/AndroidRuntime(19478): at org.apache.http.entity.mime.content.InputStreamBody.(InputStreamBody.java:62) 11-29 14:00:33.364: E/AndroidRuntime(19478): at com.petcial.petopen.custom.JSONParser.makePostFileRequest(JSONParser.java:233)

these libraries solved my issue:

like image 510
Filip Luchianenco Avatar asked Nov 29 '13 11:11

Filip Luchianenco


2 Answers

enter image description here Check that jar in Order and Export tab and run.

like image 86
Looking Forward Avatar answered Sep 22 '22 18:09

Looking Forward


There is my working solution for sending image with post, using apache http libraries (very important here is boundary add It won't work without it in my connection):

ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); byte[] imageBytes = baos.toByteArray();  HttpClient httpclient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(StaticData.AMBAJE_SERVER_URL + StaticData.AMBAJE_ADD_AMBAJ_TO_GROUP);  String boundary = "-------------" + System.currentTimeMillis();  httpPost.setHeader("Content-type", "multipart/form-data; boundary="+boundary);  ByteArrayBody bab = new ByteArrayBody(imageBytes, "pic.png"); StringBody sbOwner = new StringBody(StaticData.loggedUserId, ContentType.TEXT_PLAIN); StringBody sbGroup = new StringBody("group", ContentType.TEXT_PLAIN);  HttpEntity entity = MultipartEntityBuilder.create()                     .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)                     .setBoundary(boundary)                     .addPart("group", sbGroup)                     .addPart("owner", sbOwner)                     .addPart("image", bab)                     .build();  httpPost.setEntity(entity);  try {        HttpResponse response = httpclient.execute(httpPost);        ...then reading response 
like image 20
Krystian Avatar answered Sep 22 '22 18:09

Krystian