Java.io.IOException: ошибка записи тела запроса на сервер при использовании setChunkedStreamingModeJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java.io.IOException: ошибка записи тела запроса на сервер при использовании setChunkedStreamingMode

Сообщение Anonymous »

Код: Выделить всё

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);
}
}
Я пытаюсь зарегистрировать ход выполнения запроса POST, поэтому пытаюсь создать класс-оболочку для классического OutputStream. Метод requestBody.writeTo() просто записывает с помощью метода out.write() (out — это ссылка на выходной поток, переданный в качестве параметра), а затем сбрасывает данные.
Несмотря на то, что мы пробовали разные размеры фрагментов, через некоторое время операция завершается с ошибкой с java.io.IOException: ошибка записи тела запроса на сервер. Эта ошибка возникает не сразу, а после отправки значительного объема данных, что затрудняет определение причины.
Мой вопрос:
  • Почему этот подход через некоторое время дает сбой из-за исключения java.io.IOException и как это предотвратить?
  • Имеются ли известные ограничения или подводные камни при использовании setChunkedStreamingMode в сочетании с циклом while для отправки данных, о которых мне следует знать?
Будем очень признательны за любые идеи и предложения по решению этой проблемы.
Что я пробовал:
  • Уменьшение chunkSize в setChunkedStreamingMode до более низких значений, чтобы посмотреть, помогут ли меньшие фрагменты, но проблема остается.
  • Использование только setChunkedStreamingMode без цикла while. Использовался как размер по умолчанию, так и определенный размер.
  • Убедитесь, что сервер (он не принадлежит мне) поддерживает кодирование передачи по частям и не есть ограничения, которые я могу преодолеть.
  • Проверяю свое сетевое соединение, которое кажется стабильным и достаточно быстрым для отправляемых данных.< /p>


Подробнее здесь: https://stackoverflow.com/questions/782 ... etchunkeds
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»