pokazuje pasek postępu podczas przesyłania pliku

Mam zadanie asynchroniczne, które ma pokazywać postęp podczas przesyłania pliku. Wszystko działa, ale wygląda na to, że kończy ładowanie plików naprawdę szybko, a następnie po prostu siedzi w 100% na oczekiwaniu.

Wyśledziłem to do

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

Zauważyłem, że nie ma prawdziwego opóźnienia aż do ostatniej linii, gdzie otrzymuje kod odpowiedzi. Myślę, że dzieje się tak, że dane są buforowane, więc wygląda na to, że je przesłało, ale tak naprawdę nie - właśnie je zbuforowało. Następnie, gdy przejdę do wywołania getResponseCode (), nie ma innego wyjścia, jak zakończyć przesyłanie, aby uzyskać status przesyłania. czy jest jakiś sposób, aby rzeczywiście przesłać go po drodze, więc mogę uzyskać rozsądny postęp?

questionAnswers(4)

yourAnswerToTheQuestion