Я не смог найти документацию по ограничениям на размер файла проекта 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
И все последующие попытки возвращают тот же диапазон после истечения времени ожидания.