отображение индикатора выполнения во время загрузки файла

У меня есть асинхронная задача, которая должна показывать прогресс при загрузке файла. Все работает, за исключением того, что, похоже, он действительно очень быстро завершает загрузку файлов, а затем просто ожидает 100% ожидания.

Я проследил это до

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

Я заметил, что нет реальной задержки до самой последней строки, где он получает код ответа. Я думаю, что происходит то, что данные буферизуются, так что похоже, что они их загрузили, но на самом деле это не так - они только что буферизовали их. Затем, когда я добираюсь до вызова getResponseCode (), у него не остается другого выбора, кроме как завершить загрузку, чтобы получить статус загрузки. Есть ли способ заставить его на самом деле загрузить по пути, чтобы я мог получить разумный прогресс?

Ответы на вопрос(4)

Ваш ответ на вопрос