Fortschritt beim Hochladen von http-POST-Dateien kann nicht erfasst werden (Android)

Ich entwickle eine Android-App, mit der der Benutzer eine Datei zu Diensten wie Twitpic und anderen hochladen kann. Der POST-Upload erfolgt ohne externe Bibliotheken und funktioniert einwandfrei. Mein einziges Problem ist, dass ich keine Fortschritte machen kann, da das Hochladen abgeschlossen ist, wenn icherhalte die Antwort, nicht währendSchreibe die Bytes in den Outputstream. Folgendes mache ich:

URL url = new URL(urlString); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setDoInput(true); 
conn.setDoOutput(true); 
conn.setUseCaches(false); 
conn.setRequestMethod("POST"); 
conn.setRequestProperty("Connection", "Keep-Alive"); 
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

Dann schreibe ich die Formulardaten nach dos, was hier jetzt nicht so wichtig ist. Danach schreibe ich die Dateidaten selbst (Lesen von "in", das ist der InputStream der Daten, die ich senden möchte):

while ((bytesAvailable = in.available()) > 0)
{ 
 bufferSize = Math.min(bytesAvailable, maxBufferSize);
 byte[] buffer = new byte[bufferSize];
 bytesRead = in.read(buffer, 0, bufferSize);
 dos.write(buffer, 0, bytesRead);
} 

Danach sende ich die mehrteiligen Formulardaten, um das Ende der Datei anzugeben. Dann schließe ich die Streams:

in.close(); 
dos.flush(); 
dos.close(); 

Das alles funktioniert einwandfrei, bisher kein Problem. Mein Problem ist jedoch, dass der gesamte Vorgang bis zu diesem Punkt ungefähr ein oder zwei Sekunden dauert, egal wie groß die Datei ist. Der Upload selbst scheint zu passieren, wenn ich die Antwort lese:

DataInputStream inStream = new DataInputStream(conn.getInputStream());

Dies dauert einige Sekunden oder Minuten, je nachdem, wie groß die Datei ist und wie schnell die Internetverbindung ist. Meine Fragen sind jetzt: 1) Warum passiert das Uplaod nicht, wenn ich die Bytes zu "dos" schreibe? 2) Wie kann ich einen Fortschritt erfassen, um während des Uploads einen Fortschrittsdialog anzuzeigen, wenn alles auf einmal passiert?

/ EDIT: 1) Ich habe die Content-Length im Header eingestellt, was das Problem ein wenig ändert, aber in keiner Weise löst: Jetzt wird der gesamte Inhalt hochgeladen, nachdem das letzte Byte in den Stream geschrieben wurde. Dies ändert also nichts an der Situation, dass Sie den Fortschritt nicht erfassen können, da die Daten wiederum sofort geschrieben werden. 2) Ich habe MultipartEntity in Apache HttpClient v4 ausprobiert. Dort haben Sie überhaupt keinen OutputStream, da alle Daten geschrieben werden, wenn Sie die Anforderung ausführen. Es gibt also keine Möglichkeit, einen Fortschritt zu erzielen.

Gibt es jemanden da draußen, der eine andere Idee hat, wie man einen Prozess in einem Upload mit mehreren Teilen / Formularen abruft?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage