Como parte de mi aplicación para Android, me gustaría cargar mapas de bits para que se guarden remotamente. Tengo comunicación HTTP GET y POST simple funcionando perfectamente, pero la documentación sobre cómo hacer una POST multiparte parece ser tan rara como unicornios.Carga parcial de Android
Además, me gustaría transmitir la imagen directamente desde la memoria, en lugar de trabajar con un archivo. En el siguiente código de ejemplo, obtengo una matriz de bytes de un archivo para usarla más adelante con HttpClient y MultipartEntity.
File input = new File("climb.jpg");
byte[] data = new byte[(int)input.length()];
FileInputStream fis = new FileInputStream(input);
fis.read(data);
ByteArrayPartSource baps = new ByteArrayPartSource(input.getName(), data);
Todo esto parece bastante claro para mí, excepto que no puedo por la vida de mí averiguar dónde conseguir este ByteArrayPartSource. Me he vinculado a los archivos httpclient y httpmime JAR, pero no a los dados. Escuché que la estructura del paquete cambió drásticamente entre HttpClient 3.xy 4.x.
¿Alguien está usando este ByteArrayPartSource en Android, y cómo lo importaron?
Después de hurgar en la documentación y buscar en Internet, se me ocurrió algo que se ajustaba a mis necesidades. Para realizar una solicitud de varias partes, como un formulario POST, el código siguiente hizo el truco para mí:
File input = new File("climb.jpg");
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://localhost:3000/routes");
MultipartEntity multi = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
String line;
multi.addPart("name", new StringBody("test"));
multi.addPart("grade", new StringBody("test"));
multi.addPart("quality", new StringBody("test"));
multi.addPart("latitude", new StringBody("40.74"));
multi.addPart("longitude", new StringBody("40.74"));
multi.addPart("photo", new FileBody(input));
post.setEntity(multi);
HttpResponse resp = client.execute(post);
El bit HTTPMultipartMode.BROWSER_COMPATIBLE es muy importante. Gracias a Radomir's blog en este caso.
Si alguien está buscando para resolver la importación MultipartEntity. Echa un vistazo a esta publicación de blog con enlaces a http: //blog.tacticalnuclearstrike del jar.com/2010/01/using-multipartentity-in-android-applications/ – Blundell
Gracias por eso. Estaba teniendo el mismo problema. Excepto que ahora lo que me preocupa es que el tamaño del archivo de mi aplicación es 3 o 4 veces mayor. Me pregunto si podría haber una manera de simplemente agregar soporte para multiparte en lugar de cargar 4 jarras. –