volley studio example android httprequest

studio - volley android example



Subir foto usando HttpPost MultiPartEntityBuilder (4)

Estoy tratando de subir la foto tomada al servidor. esto es lo que hago:

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();

Me sale este error:

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

¿Qué estoy haciendo mal?

Actualizar

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();

Aquí está el error:

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

estas bibliotecas resolvieron mi problema:


Mejor pasas la ruta del archivo de imagen. Abajo está mi código que usé para subir la imagen al servidor.

public class UploadProductDetails { public void uploadProductDetails(String filePath, String fileName) { InputStream inputStream; try { inputStream = new FileInputStream(new File(filePath)); byte[] data; try { data = IOUtils.toByteArray(inputStream); HttpClient httpClient = new DefaultHttpClient(); httpClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, System.getProperty("http.agent")); HttpPost httpPost = new HttpPost("http://ipaddress"); InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data), "abc.png"); MultipartEntity multipartEntity = new MultipartEntity(); multipartEntity.addPart("file", inputStreamBody); httpPost.setEntity(multipartEntity); HttpResponse httpResponse = httpClient.execute(httpPost); // Handle response back from script. if(httpResponse != null) { //Toast.makeText(getBaseContext(), "Upload Completed. ", 2000).show(); } else { // Error, no response. //Toast.makeText(getBaseContext(), "Server Error. ", 2000).show(); } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e1) { e1.printStackTrace(); } } }


Mi solución de trabajo es enviar imágenes con publicaciones, usar las bibliotecas http de apache (muy importante aquí es agregar límites No funcionará sin ella en mi conexión):

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


Tenga en cuenta que el uso de este código: new InputStreamBody(new ByteArrayInputStream(yourByteArray)) puede ocasionar algunos problemas, porque devuelve -1 al llamar a getContentLength() .

En su lugar, use esto: new ByteArrayBody(yourByteArray)


Verifique ese tarro en la pestaña Ordenar y exportar y ejecute.