Anzeige eines Fortschrittsbalkens beim Hochladen von Dateien

Ich habe eine asynchrone Aufgabe, die den Fortschritt während eines Datei-Uploads anzeigen soll. Alles funktioniert, außer dass es so aussieht, als ob der Datei-Upload wirklich sehr schnell abgeschlossen ist und es dann nur noch zu 100% wartet.

Ich habe das zurückverfolgt

URL url = new URL(urlServer);
connection = (HttpURLConnection) url.openConnection();

// Allow Inputs & Outputs
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);

// Enable POST method
connection.setRequestMethod("POST");

connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);

outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(twoHyphens + boundary + lineEnd);
outputStream.writeBytes("Content-Disposition: form-data; name=\"Filedata\";filename=\"" + pathToOurFile + "\"" + lineEnd);
outputStream.writeBytes(lineEnd);
long totalBytesWritten = 0;
while (bytesRead > 0) {
    outputStream.write(buffer, 0, bufferSize);
    outputStream.flush();
    if (mCancel) { throw new CancelException(); }

    totalBytesWritten += bufferSize;
    if (mProgressDialog != null) { 
            mProgressDialog.setProgress(Integer.valueOf((int) (totalBytesWritten / 1024L))); 
    }

    bytesAvailable = fileInputStream.available();
    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
outputStream.writeBytes(lineEnd);
outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

// Responses from the server (code and message)
int serverResponseCode = connection.getResponseCode();

Was mir aufgefallen ist, ist, dass es keine wirkliche Verzögerung bis zur letzten Zeile gibt, in der der Antwortcode abgerufen wird. Ich denke, was passiert ist, dass die Daten gepuffert werden, so dass es aussieht, als hätte es sie hochgeladen, aber nicht wirklich - es hat sie nur gepuffert. Wenn ich dann zum Aufruf getResponseCode () komme, hat es keine andere Wahl, als den Upload zu beenden, um den Upload-Status zu erhalten. Gibt es eine Möglichkeit, es tatsächlich hochzuladen, damit ich einen vernünftigen Fortschritt erzielen kann?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage