La version courte - org.apache...MultipartEntity
est obsolète, et sa mise à niveau, MultipartEntityBuilder
, semble sous-représentée dans nos forums en ligne. Nous allons remédier à cela. Comment enregistrer un rappel, donc mon (Android) peut afficher une barre de progression comme il télécharge un fichier?
La version longue - Voici le "manque de saleté simple exemple" MultipartEntityBuilder
:
public static void postFile(String fileName) throws Exception {
// Based on: http://stackoverflow.com/questions/2017414/post-multipart-request-with-android-sdk
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(SERVER + "uploadFile");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addPart("file", new FileBody(new File(fileName)));
builder.addTextBody("userName", userName);
builder.addTextBody("password", password);
builder.addTextBody("macAddress", macAddress);
post.setEntity(builder.build());
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
// response.getStatusLine(); // CONSIDER Detect server complaints
entity.consumeContent();
client.getConnectionManager().shutdown();
} // FIXME Hook up a progress bar!
Nous avons besoin de le corriger FIXME
. (Un avantage supplémentaire serait interruptible uploads.) Mais (corrigez-moi si je me trompe), tous les exemples en ligne semblent tomber à court.
Celui-ci, http://pastebin.com/M0uNZ6SBpar exemple, télécharge un fichier en tant que "binaire/octet-stream", pas un "multipart/form-data". J'ai besoin de véritables champs.
Cet exemple, Upload de Fichier avec Java (avec barre de progression), montre comment remplacer l' *Entity
ou *Stream
. Alors peut-être je peux dire que l' MultipartEntityBuilder
de .create()
un substituée entité mètres de son avancement du téléchargement?
Donc, si je veux remplacer quelque chose, et de remplacer le flux avec un comptage de flux qui envoie un signal pour chaque tranche de 1000 octets, peut-être que je peux prolonger l' FileBody
partie, et de remplacer son getInputStream
et/ou writeTo
.
Mais quand j'essaie class ProgressiveFileBody extends FileBody {...}
,- je obtenir de l'infâme java.lang.NoClassDefFoundError
.
Ainsi, alors que je faire de la spéléologie autour de mon .jar
fichiers, manque de Def, quelqu'un peut-il vérifier mes calculs, et peut-être à un point de plus simple correctif, j'ai négligé?