Come parte della mia app per Android, vorrei caricare bitmap per essere archiviati in remoto. Ho una semplice comunicazione HTTP GET e POST che funziona perfettamente, ma la documentazione su come fare un POST multipart sembra essere rara quanto gli unicorni.Caricamento multiparte Android
Inoltre, mi piacerebbe trasmettere l'immagine direttamente dalla memoria, invece di lavorare con un file. Nel codice di esempio riportato di seguito, ricevo un array di byte da un file da utilizzare in seguito con HttpClient e 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);
Tutto questo sembra abbastanza chiaro per me, se non che io non posso per la vita di me scoprire dove per ottenere questo ByteArrayPartSource. Ho collegato i file JAR httpclient e httpmime, ma senza dadi. Ho sentito che la struttura del pacchetto è cambiata drasticamente tra HttpClient 3.xe 4.x.
Qualcuno sta utilizzando questo ByteArrayPartSource in Android e come l'ha importato?
Dopo aver scavato nella documentazione e aver setacciato Internet, ho trovato qualcosa che rispondesse alle mie esigenze. Per effettuare una richiesta più parti come ad esempio un modulo POST, il codice seguente ha fatto il trucco per me:
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);
Il bit HTTPMultipartMode.BROWSER_COMPATIBLE è molto importante. Grazie a Radomir's blog su questo.
Se qualcuno sta cercando di risolvere l'importazione MultipartEntity. Dai un'occhiata a questo post del blog con i link al http: //blog.tacticalnuclearstrike del jar.it/2010/01/using-multipartentity-in-android-applications/ – Blundell
Grazie per quello. Avevo lo stesso problema. Tranne ora ciò che mi preoccupa è che la dimensione del file della mia app è 3 o 4 volte più grande. Mi chiedo se potrebbe esserci un modo per aggiungere semplicemente il supporto per multipart invece di caricare 4 jar. –