- Вы хотите обновить существующий файл на Google Диске с помощью метода возобновляемой загрузки.
Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
К сожалению, из вашего вопроса я не смог понять тело запроса подробностей вашего теста. Этим я не могу повторить вашу ситуацию. Поэтому в этом ответе я хотел бы предложить пример потока для обновления существующего файла с помощью возобновляемой загрузки.
Пример ситуации:
В этом ответе в качестве примера ситуации предполагается, что текстовый файл на Google Диске обновляется путем повторной загрузки с несколькими кусками. И в качестве метода запроса я использую команду curl.
Я подготовил 2 файла для 2 блоков. В качестве тестовой ситуации загружены 2 блока по 262 144 байта и 37 856 байтов. Таким образом, общий размер загрузки составляет 300 000 байт.
При использовании возобновляемой загрузки соблюдайте следующие правила.
Добавьте данные чанка в тело запроса. Создайте фрагменты размером в 256 КБ (256 x 1024 байта), за исключением последнего фрагмента, который завершает загрузку. Сохраняйте размер куска как можно большим, чтобы загрузка была эффективной. Ссылка
Порядок обновления файла при возобновляемой загрузке:
1. Инициируйте возобновляемый сеанс загрузки
Создайте сеанс для загрузки с возобновляемой загрузкой. В этом случае существующий файл обновляется, поэтому конечной точкой является PUT https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable
. Но как важный момент, пожалуйста, используйте метод PATCH
вместо PUT
. Когда используется PUT
, location
не включается в заголовок ответа. Я подумал, что официальный документ может быть неправильным.
$ curl -X PATCH -i \
-H "Authorization: Bearer ###accessToken###" \
"https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable"
Если вы хотите обновить файл как многоэтапную загрузку, используйте следующую примерную команду. В этом случае имя файла изменяется.
$ curl -X PATCH -i \
-H "Authorization: Bearer ###accessToken###" \
-H "Content-Type: application/json; charset=UTF-8" \
-d '{"name":"updatedFilename.txt"}' \
"https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable"
2. Загрузка 1-го блока
$ curl -X PUT -i \
-H "Content-Length: 262144" \
-H "Content-Range: bytes 0-262143/300000" \
-H "Content-Type: text/plain" \
-F "file=@data1.txt" \
"https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable&upload_id=###"
- Когда эта команда curl запущена, возвращается
308 Resume Incomplete
. Таким образом выясняется, что чанк может быть правильно загружен.
3. Загрузите 2-й блок (это последний блок в этом примере потока).
$ curl -X PUT -i \
-H "Content-Length: 37856" \
-H "Content-Range: bytes 262144-299999/300000" \
-H "Content-Type: text/plain" \
-F "file=@data2.txt" \
"https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable&upload_id=###"
- При выполнении этой команды curl возвращается
200 OK
и метаданные файла также возвращаются. Таким образом, обнаруживается, что возобновляемая загрузка может быть выполнена правильно.
Примечание:
- В этом случае файл обновляется как перезаписываемый. Поэтому, пожалуйста, будьте осторожны.
- В моей среде, даже когда
PUT
изменен на PATCH
для загрузки чанков, я могу подтвердить, что вышеуказанный поток работает. - Если в вашей среде возникает ошибка, попробуйте протестировать эту модификацию.
- Пример вышеописанной ситуации, если вы хотите выгрузить один фрагмент размером 300 000 байт, пожалуйста, используйте
-H "Content-Length: 300000" -H "Content-Range: bytes 0-299999/300000"
.
Ссылки:
Если я неправильно понял ваш вопрос и это было не то направление, которое вы хотите, я прошу прощения.