Dans le cadre de mon application Android, je souhaite télécharger des bitmaps à stocker à distance. J'ai une simple communication HTTP GET et POST fonctionnant parfaitement, mais la documentation sur la façon de faire un POST multipart semble être aussi rare que les licornes.Android Multipart Upload
En outre, je voudrais transmettre l'image directement de la mémoire, au lieu de travailler avec un fichier. Dans l'exemple de code ci-dessous, j'obtiens un tableau d'octets à partir d'un fichier à utiliser plus tard avec HttpClient et 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);
Tout cela semble assez clair pour moi, sauf que je ne peux pas pour la vie de me trouver où obtenir ce ByteArrayPartSource. J'ai lié aux dossiers de JAR de httpclient et de httpmime, mais aucun dés. J'entends que la structure du paquet a changé radicalement entre HttpClient 3.x et 4.x.
Est-ce que quelqu'un utilise ce ByteArrayPartSource dans Android, et comment l'a-t-il importé? Après avoir exploré la documentation et parcouru Internet, j'ai trouvé quelque chose qui correspond à mes besoins. Pour faire une demande multipart comme un formulaire POST, le code suivant fait l'affaire pour moi:
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);
Le bit HTTPMultipartMode.BROWSER_COMPATIBLE est très important. Merci à Radomir's blog sur celui-ci.
Si quelqu'un cherche à résoudre l'importation MultipartEntity. Découvrez ce billet de blog avec des liens vers http: //blog.tacticalnuclearstrike.com/2010/01/using-multipartentity-in-android-applications/ – Blundell
Merci pour cela. J'avais le même problème. Sauf que maintenant ce qui m'inquiète, c'est que la taille de mon application est 3 ou 4 fois plus grande. Je me demande s'il pourrait y avoir un moyen d'ajouter simplement le support pour multipart au lieu de charger 4 jars. –