Google Drive API не может обрабатывать большие загрузки скрипта проекта - PullRequest
1 голос
/ 23 апреля 2020

Я не смог найти документацию по ограничениям на размер файла проекта App Script, но, похоже, это моя проблема. У меня есть большой JS файл, который нужно добавить в проект App Script - результирующий JSON для проекта имеет 5,4 МБ. Я пытался использовать веб-редактор для добавления нового файла JS, но, поскольку он слишком велик, браузер не может его обработать. Затем я экспортировал файл App Script, используя Google API, добавив новый контент, а затем снова импортировав результат на Drive, используя другой API, как описано здесь: https://developers.google.com/apps-script/guides/import-export

I попытался загрузить, используя uploadType=media, и это не удалось с ошибкой 408 (время ожидания запроса). Я предположил, что это потому, что размер файла превышает 5 МБ, поскольку в документации рекомендуется использовать uploadType=resumable. Затем я попробовал последний тип, следуя обоим подходам: один запрос - который снова не выполняется, как и ожидалось из-за размера файла, и как несколько запросов, которые в теории должны работать. Но я могу попытаться сделать тайм-аут после загрузки начальных 5 МБ, вернув 408 через несколько минут.

Кажется, что API может загрузить первые 5 МБ, но после этого теряется. Все, что я прочитал о Drive, заставляет меня поверить, что это не ограничение Drive, поэтому я подозреваю, что это ограничение App Script.

Вот шаги:

Создание возобновляемого сеанса загрузки

curl -X PUT \
-H "Authorization: $GOOGLE_BEARER_TOKEN" \
-H "X-Upload-Content-Type: application/vnd.google-apps.script+json" \
-H "X-Upload-Content-Length: 5415490" \
-H "Content-Type: application/json; charset=UTF-8" \
-H "Content-Length: 23" \
-d "{\"title\": \"MyProject\"}" \
-v "https://www.googleapis.com/upload/drive/v2/files/###FILE_ID###?uploadType=resumable"

Получите идентификатор загрузки и URL

HTTP/2 200 
x-guploader-uploadid: ###UPLOAD_ID###
location: https://www.googleapis.com/upload/drive/v2/files/###FILE_ID###?uploadType=resumable&upload_id=###UPLOAD_ID###

Сохраните URL

GOOGLE_UPLOAD_LOCATION=https://www.googleapis.com/upload/drive/v2/files/###FILE_ID###?uploadType=resumable&upload_id=###UPLOAD_ID###

Отправьте первый чанк

curl -X PUT \
-H "Authorization: $GOOGLE_BEARER_TOKEN" \
-H "Content-Type: application/vnd.google-apps.script+json" \
-H "Content-Length: 5242879" \
-H "Content-Range: bytes 0-5242878/5415490" \
-T file_chunk_1 \
-v "$GOOGLE_UPLOAD_LOCATION"

Успех: первый 4980736 байт было получено

HTTP/2 308 
range: bytes=0-4980735

Отправка первого чанка с оставшимися байтами

curl -X PUT \
-H "Authorization: $GOOGLE_BEARER_TOKEN" \
-H "Content-Type: application/vnd.google-apps.script+json" \
-H "Content-Length: 434754" \
-H "Content-Range: bytes 4980736-5415489/5415490" \
-T file_chunk_2 \
-v "$GOOGLE_UPLOAD_LOCATION"

Через несколько минут тайм-аут

HTTP/2 408 

Проверка статуса загрузки:

curl -X PUT \                          
-H "Authorization: $GOOGLE_BEARER_TOKEN" \
-H "Content-Length: 0" \
-H "Content-Range: bytes */5415490" \
-v "$GOOGLE_UPLOAD_LOCATION"

Я вижу, что были загружены только первые 5 МБ:

HTTP/2 308
range: bytes=0-5242879

И все последующие попытки возвращают тот же диапазон после истечения времени ожидания.

1 Ответ

0 голосов
/ 23 апреля 2020

Видимо проблема была в файле, который я сам загружал. Я понял, что загружаю один файл внутри проекта (т.е. внутри файла JSON проекта) с идентификатором, который я удалил в одном из моих нескольких тестов. Процесс настолько подвержен ошибкам, что я этого не видел.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...