короткая версия - org.apache...MultipartEntity
устарела, а ее обновление MultipartEntityBuilder
отображается на наших онлайн-форумах недопредставленно. Пусть исправить это. Как регистрировать обратный вызов, поэтому мое приложение (Android) может отображать индикатор выполнения при его загрузке?
длинная версия. Здесь представлен "недостающий простой пример" MultipartEntityBuilder
:
public static void postFile(String fileName) throws Exception {
// Based on: https://stackoverflow.com/info/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!
Нам нужно исправить это FIXME
. (Дополнительным преимуществом будет прерывание загрузки.) Но (пожалуйста, поправьте меня, не ошибаюсь я или нет), все онлайн-примеры кажутся короткими.
Этот http://pastebin.com/M0uNZ6SB, например, загружает файл как "двоичный/октетный поток"; а не "multipart/form-data". Мне нужны реальные поля.
В этом примере Загрузка файла с Java (с индикатором выполнения) показывает, как переопределить *Entity
или *Stream
. Может быть, я могу сказать MultipartEntityBuilder
to .create()
переопределенный объект, который измеряет его уровень загрузки?
Итак, если я хочу что-то переопределить и заменить встроенный поток потоком подсчета, который посылает сигнал на каждые 1000 байтов, возможно, я могу расширить часть FileBody
и переопределить его getInputStream
и/или writeTo
.
Но когда я пытаюсь class ProgressiveFileBody extends FileBody {...}
, я получаю печально известный java.lang.NoClassDefFoundError
.
Итак, пока я просматриваю файлы .jar
, ища отсутствующий Def, может ли кто-то проверить мою математику и, возможно, указать на более простое исправление, которое я упустил?