Загрузите финальную часть нулевого размера в возобновляемую загрузку Google Cloud Storage. - PullRequest
0 голосов
/ 14 февраля 2020

Распространенная проблема при использовании возобновляемой загрузки заключается в том, что окончательный размер загрузки неизвестен при ее запуске. Google решил эту проблему, позволив пользователю (кредит этот SO-ответ ):

(a) отправить чанк, не кратный 256 КБ (необходимый чанк) размер GCS) или

(b) отправка чанка с байтами NNN-MMM / (MMM + 1). То есть последний блок содержит общий размер для загрузки и указывает, что он содержит последний байт

Проблема, с которой я столкнулся, заключается в крайнем случае отправки последнего фрагмента, кратного 256 КБ, и он не знает, что это последний блок до тех пор, пока он не будет отправлен в GCS API. Я думал, что смогу обойти это, отправив нулевой байтовый блок с заголовками Content-Length: 0 и Content-Range: NNN-MMM / (MMM + 1), например (Content-Range: 262143-262143 / 262144 ). Это, похоже, не работает, и я получаю ответ 408 тайм-аут, и объект не завершен.

Что я могу сделать, чтобы решить эту проблему и сообщить GCS API, что моя загрузка завершена после того, как я уже загрузил все данные?

1 Ответ

1 голос
/ 14 февраля 2020

Проблема с пакетом длиной 0 в конце - это известная проблема, которая отслеживается на Этот канал Github Это все еще открытая проблема.

Кажется, проблема заключается в что сервер обрабатывает его как 0-байтную загрузку и возвращает, что предыдущие чанки были загружены, но клиент продолжает ждать подтверждения последнего чанка.

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

...