Код: Выделить всё
try (OutputStream out = new OutputStreamWithProgress(out, data.length)) {
int offset = 0;
while (offset < data.length) {
int len = Math.min(chunkSize, data.length - offset);
requestBody.writeTo(out, data, offset, len);
offset += len;
System.out.println("Uploaded " + offset + " of " + data.length + " bytes");
}
} catch (IOException e) {
// handle
}
Код: Выделить всё
static class OutputStreamWithProgress {
private final OutputStream out; // The underlying output stream
private final long totalBytes; // Total size of the data to be written
private long bytesWritten = 0; // Number of bytes written so far
public ProgressOutputStream(OutputStream out, long totalBytes) {
this.out = out;
this.totalBytes = totalBytes;
}
@Override
public void write(int b) throws IOException {
out.write(b);
bytesWritten++;
logProgress();
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
out.write(b, off, len);
bytesWritten += len;
logProgress();
}
private void logProgress() {
// Calculate progress percentage
int progress = (int) ((bytesWritten * 100) / totalBytes);
}
}
Несмотря на то, что мы пробовали разные размеры фрагментов, через некоторое время операция завершается с ошибкой с java.io.IOException: ошибка записи тела запроса на сервер. Эта ошибка возникает не сразу, а после отправки значительного объема данных, что затрудняет определение причины.
Мой вопрос:
- Почему этот подход через некоторое время дает сбой из-за исключения java.io.IOException и как это предотвратить?
- Имеются ли известные ограничения или подводные камни при использовании setChunkedStreamingMode в сочетании с циклом while для отправки данных, о которых мне следует знать?
Что я пробовал:
- Уменьшение chunkSize в setChunkedStreamingMode до более низких значений, чтобы посмотреть, помогут ли меньшие фрагменты, но проблема остается.
- Использование только setChunkedStreamingMode без цикла while. Использовался как размер по умолчанию, так и определенный размер.
- Убедитесь, что сервер (он не принадлежит мне) поддерживает кодирование передачи по частям и не есть ограничения, которые я могу преодолеть.
- Проверяю свое сетевое соединение, которое кажется стабильным и достаточно быстрым для отправляемых данных.< /p>
Подробнее здесь: https://stackoverflow.com/questions/782 ... etchunkeds
Мобильная версия