mostrando una barra de progreso durante la carga del archivo

Tengo una tarea asíncrona que se supone que muestra el progreso durante la carga de un archivo. Todo funciona, excepto que parece que finaliza la carga del archivo realmente rápido, y luego se queda ahí esperando al 100%.

He rastreado esto hasta

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();

Lo que noté es que no hay un retraso real hasta la última línea donde está recibiendo el código de respuesta. Creo que lo que está sucediendo es que los datos se están almacenando en un búfer, así que parece que los ha subido, pero en realidad no los ha almacenado en búfer. Luego, cuando llego a la llamada getResponseCode (), no tiene más remedio que finalizar la carga para obtener el estado de carga. ¿Hay alguna forma de hacerlo subir en el camino para que pueda obtener un progreso razonable?

Respuestas a la pregunta(4)

Su respuesta a la pregunta