API Google Drive позволяет загружать данные файлов при создании или обновлении File . Информацию о том, как создать файл, содержащий только метаданные, например, папку, см. в разделе «Создание файлов, содержащих только метаданные» .
Вы можете выполнить три типа загрузки:
Простая загрузка (
uploadType=media) : Используйте этот тип загрузки для передачи небольшого медиафайла (5 МБ или меньше) без предоставления метаданных. Для выполнения простой загрузки см. раздел «Выполнение простой загрузки» .Многокомпонентная загрузка (
uploadType=multipart) : "Используйте этот тип загрузки для передачи небольшого файла (5 МБ или меньше) вместе с метаданными, описывающими файл, в одном запросе. Для выполнения многокомпонентной загрузки см. раздел " Выполнение многокомпонентной загрузки ."Возобновляемая загрузка (
uploadType=resumable) : Используйте этот тип загрузки для больших файлов (более 5 МБ) и в случаях высокой вероятности прерывания сети, например, при создании файла из мобильного приложения. Возобновляемая загрузка также является хорошим выбором для большинства приложений, поскольку она работает и для небольших файлов с минимальными затратами в виде одного дополнительного HTTP-запроса на каждую загрузку. Чтобы выполнить возобновляемую загрузку, см. раздел «Выполнение возобновляемой загрузки» .
Клиентские библиотеки Google API реализуют как минимум один из этих типов загрузки. Для получения дополнительной информации об использовании каждого из типов обратитесь к документации клиентской библиотеки .
Используйте PATCH вместо PUT
Напомним, что HTTP-метод PATCH поддерживает частичное обновление файловых ресурсов, тогда как HTTP-метод PUT поддерживает полную замену ресурсов. Обратите внимание, что PUT может привести к критическим изменениям при добавлении нового поля к существующему ресурсу.
При загрузке файлов используйте следующие рекомендации:
- Для первоначального запроса при возобновляемой загрузке или для единственного запроса при простой или многокомпонентной загрузке используйте HTTP-метод, описанный в справочнике API.
- Для всех последующих запросов на возобновление загрузки после начала запроса используйте
PUT. Эти запросы загружают контент независимо от используемого метода.
Выполните простую загрузку.
Для выполнения простой загрузки используйте метод create ресурса files с uploadType=media .
Ниже показано, как выполнить простую загрузку:
HTTP
Создайте
POSTзапрос к URI метода /upload с параметром запросаuploadType=media:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=mediaДобавьте данные файла в тело запроса.
Добавьте следующие HTTP-заголовки:
-
Content-Type. Установите значение MIME-типа загружаемого объекта. -
Content-Length. Установите значение, равное количеству загружаемых байтов. Если используется кодировка с пошаговой передачей данных, этот заголовок не требуется.
-
Отправьте запрос. Если запрос выполнен успешно, сервер вернет код состояния
HTTP 200 OKвместе с метаданными файла. {HTTP}
При выполнении простой загрузки создаются основные метаданные, а некоторые атрибуты определяются на основе файла, например, MIME-тип или modifiedTime . Простую загрузку можно использовать в случаях, когда у вас небольшие файлы и метаданные файла не важны.
Выполните многокомпонентную загрузку.
Запрос на многокомпонентную загрузку позволяет загружать метаданные и данные в одном запросе. Используйте этот параметр, если отправляемые данные достаточно малы, чтобы их можно было повторно загрузить целиком в случае сбоя соединения.
Для выполнения многокомпонентной загрузки используйте метод create ресурса files с uploadType=multipart .
Ниже показано, как выполнить многокомпонентную загрузку:
Java
Python
Node.js
PHP
.СЕТЬ
HTTP
Создайте
POSTзапрос к URI метода /upload с параметром запросаuploadType=multipart:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipartСоздайте тело запроса. Отформатируйте тело в соответствии с типом содержимого multipart/related в RFC 2387 , который состоит из двух частей:
- Метаданные. Метаданные должны располагаться первыми и иметь заголовок
Content-Typeсо значениемapplication/json;charset=UTF-8. Добавьте метаданные файла в формате JSON. - Медиафайлы. Медиафайл должен быть указан вторым и иметь заголовок
Content-Typeлюбого MIME-типа. Добавьте данные файла в раздел медиафайлов.
Обозначьте каждую часть строкой-разделителем, перед которой стоят два дефиса. Кроме того, добавьте два дефиса после последней строки-разделителя.
- Метаданные. Метаданные должны располагаться первыми и иметь заголовок
Добавьте следующие HTTP-заголовки верхнего уровня:
- В
Content-Typeустановите значениеmultipart/relatedи укажите разделительную строку, используемую для идентификации различных частей запроса. Например:Content-Type: multipart/related; boundary=foo_bar_baz -
Content-Length. Установите значение, равное общему количеству байтов в теле запроса.
- В
Отправьте запрос.
Чтобы создать или обновить только метаданные, без связанных данных, отправьте POST или PATCH запрос на стандартную конечную точку ресурса: https://www.googleapis.com/drive/v3/files Если запрос выполнен успешно, сервер возвращает код состояния HTTP 200 OK вместе с метаданными файла.
При создании файлов следует указывать расширение файла в поле name файла. Например, при создании файла фотографии в формате JPEG можно указать что-то вроде "name": "photo.jpg" в метаданных. Последующие вызовы метода get возвращают свойство fileExtension доступное только для чтения и содержащее расширение, первоначально указанное в поле name .
Выполните загрузку с возможностью возобновления.
Функция возобновляемой загрузки позволяет возобновить операцию загрузки после сбоя связи, прервавшего поток данных. Поскольку вам не нужно начинать загрузку больших файлов с самого начала, возобновляемая загрузка также может снизить потребление полосы пропускания в случае сбоя сети.
Возобновляемая загрузка полезна, когда размеры файлов могут сильно различаться или когда существует фиксированное ограничение по времени для запросов (например, фоновые задачи мобильной ОС и некоторые запросы App Engine). Возобновляемую загрузку также можно использовать в ситуациях, когда необходимо отображать индикатор выполнения загрузки.
Возобновляемая загрузка состоит из нескольких основных этапов:
- Отправьте первоначальный запрос и получите URI сессии, которую можно возобновить.
- Загрузите данные и отслеживайте состояние загрузки.
- (необязательно) Если загрузка прервалась, возобновите загрузку.
Отправьте первоначальный запрос
Для запуска возобновляемой загрузки используйте метод create ресурса files с uploadType=resumable .
HTTP
Создайте
POSTзапрос к URI метода /upload с параметром запросаuploadType=resumable:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumableЕсли запрос на инициацию проходит успешно, ответ содержит HTTP-код состояния
200 OK. Кроме того, он включает заголовокLocation, указывающий URI для возобновления сессии:HTTP/1.1 200 OK Location: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=xa298sd_sdlkj2 Content-Length: 0Сохраните URI возобновляемой сессии, чтобы иметь возможность загружать данные файла и запрашивать статус загрузки. Срок действия URI возобновляемой сессии истекает через неделю.
Если у вас есть метаданные для файла, добавьте их в тело запроса в формате JSON. В противном случае оставьте тело запроса пустым.
Добавьте следующие HTTP-заголовки:
-
X-Upload-Content-Type. Необязательный параметр. Устанавливается в MIME-тип данных файла, который передается в последующих запросах. Если MIME-тип данных не указан в метаданных или через этот заголовок, объект передается какapplication/octet-stream. -
X-Upload-Content-Length. Необязательный параметр. Устанавливается в количество байтов данных файла, которые передаются в последующих запросах. -
Content-Type. Обязательно, если у файла есть метаданные. Установите значениеapplication/json;charset=UTF-8. -
Content-Length. Обязателен, если вы не используете кодирование с пошаговой передачей. Установите значение, равное количеству байтов в теле этого первоначального запроса.
-
Отправьте запрос. Если запрос на инициализацию сессии выполнен успешно, ответ будет содержать
200 OK HTTP. Кроме того, ответ будет содержать заголовокLocation, указывающий URI возобновляемой сессии. Используйте URI возобновляемой сессии для загрузки данных файла и запроса статуса загрузки. Срок действия URI возобновляемой сессии истекает через одну неделю.Скопируйте и сохраните URL-адрес возобновляемой сессии.
Продолжайте загрузку контента .
Загрузите контент
Существует два способа загрузки файла с возможностью возобновления сессии:
- Загрузка контента одним запросом : используйте этот подход, если файл можно загрузить за один запрос, если нет фиксированного временного ограничения для каждого отдельного запроса или если вам не нужно отображать индикатор хода загрузки. Этот подход является наилучшим, поскольку требует меньшего количества запросов и обеспечивает более высокую производительность.
Загрузка контента по частям : используйте этот подход, если вам необходимо уменьшить объем данных, передаваемых в одном запросе. Уменьшение объема передаваемых данных может потребоваться, если для отдельных запросов установлен фиксированный временной лимит, как это может быть в случае с некоторыми типами запросов App Engine. Этот подход также полезен, если вам необходимо предоставить настраиваемый индикатор для отображения хода загрузки.
HTTP - одиночный запрос
- Создайте
PUTзапрос к URI возобновляемой сессии. - Добавьте данные файла в тело запроса.
- Добавьте HTTP-заголовок Content-Length, задав значение, равное количеству байтов в файле.
- Отправьте запрос. Если запрос на загрузку прерван или вы получили ответ с
5xx, следуйте процедуре, описанной в разделе «Возобновление прерванной загрузки» .
HTTP - множественные запросы
Создайте
PUTзапрос к URI возобновляемой сессии.Добавьте данные фрагмента в тело запроса. Создавайте фрагменты размером, кратным 256 КБ (256 x 1024 байт), за исключением последнего фрагмента, завершающего загрузку. Старайтесь, чтобы размер фрагмента был как можно больше для обеспечения эффективности загрузки.
Добавьте следующие HTTP-заголовки:
-
Content-Length. Установите значение, равное количеству байтов в текущем блоке. -
Content-Rangeуказывает, какие именно байты файла вы загружаете. Например,Content-Range: bytes 0-524287/2000000показывает, что вы загружаете первые 524 288 байт (256 x 1024 x 2) из файла размером 2 000 000 байт.
-
Отправьте запрос и обработайте ответ. Если запрос на загрузку прерван или вы получили ответ с
5xx, следуйте процедуре, описанной в разделе «Возобновление прерванной загрузки» .Повторяйте шаги с 1 по 4 для каждого оставшегося фрагмента в файле. Используйте заголовок
Rangeв ответе, чтобы определить, с какого места начать следующий фрагмент. Не следует предполагать, что сервер получил все байты, отправленные в предыдущем запросе.
После завершения загрузки файла вы получите ответ 200 OK или 201 Created , а также все метаданные, связанные с ресурсом.
Возобновить прерванную загрузку
Если запрос на загрузку прерывается до получения ответа или если вы получаете сообщение об ошибке 503 Service Unavailable , вам необходимо возобновить прерванную загрузку.
HTTP
Чтобы запросить статус загрузки, создайте пустой
PUTзапрос к URI возобновляемой сессии.Добавьте заголовок
Content-Rangeчтобы указать, что текущая позиция в файле неизвестна. Например, установитеContent-Rangeравным*/2000000, если общая длина файла составляет 2 000 000 байт. Если полный размер файла неизвестен, установитеContent-Rangeравным*/*.Отправьте запрос.
Обработайте ответ:
- Ответ
200 OKили201 Createdозначает, что загрузка завершена и никаких дальнейших действий не требуется. - Сообщение
308 Resume Incompleteозначает, что вам необходимо продолжить загрузку файла. - Ошибка
404 Not Foundозначает, что сессия загрузки истекла, и загрузку необходимо начать заново.
- Ответ
Если вы получили ответ
308 Resume Incomplete, обработайте заголовокRangeответа, чтобы определить, какие байты были получены сервером. Если в ответе отсутствует заголовокRange, значит, байты не были получены. Например, заголовокRangeсо значениемbytes=0-42указывает на то, что были получены первые 43 байта файла, и что следующий фрагмент для загрузки будет начинаться с байта 44.Теперь, когда вы знаете, с какого места возобновить загрузку, продолжайте загрузку файла, начиная со следующего байта. Добавьте заголовок
Content-Range, чтобы указать, какую часть файла вы отправляете. Например,Content-Range: bytes 43-1999999означает, что вы отправляете байты с 44 по 2 000 000.
Обработка ошибок загрузки медиафайлов
При загрузке медиафайлов следуйте этим рекомендациям для обработки ошибок:
- При возникновении ошибок
5xxвозобновите или повторите загрузку, которая не удалась из-за прерывания соединения. Для получения дополнительной информации об обработке ошибок5xx. разделы, посвященные ошибкам 500, 502, 503, 504 . - При ошибке
403 rate limit, повторите загрузку. Для получения дополнительной информации об обработке ошибок403 rate limit, см. раздел «Ошибка 403:rateLimitExceeded». - При возникновении любых ошибок
4xx(включая403) во время возобновляемой загрузки, перезапустите загрузку. Эти ошибки указывают на то, что сессия загрузки истекла, и ее необходимо перезапустить, запросив новый URI сессии . Сессии загрузки также истекают через неделю бездействия.
Импорт в Google Документы (типы)
При создании файла в Google Диске вам может потребоваться преобразовать его в формат, аналогичный Google Workspace, например, Google Docs или Google Sheets. Например, вы можете захотеть преобразовать документ из вашего любимого текстового редактора в формат Google Docs, чтобы воспользоваться его функциями.
Чтобы преобразовать файл в определенный тип файла Google Workspace, укажите mimeType Google Workspace при создании файла.
Ниже показано, как преобразовать CSV-файл в таблицу Google Workspace:
Java
Python
Node.js
PHP
.СЕТЬ
Чтобы проверить наличие возможности преобразования, перед созданием файла проверьте поле importFormats в ресурсе about . Поддерживаемые преобразования динамически отображаются в этом массиве. Некоторые распространенные форматы импорта:
| От | К |
|---|---|
| Microsoft Word, OpenDocument Text, HTML, RTF, обычный текст | Google Документы |
| Microsoft Excel, электронные таблицы OpenDocument, CSV, TSV, простой текстовый файл. | Google Таблицы |
| Microsoft PowerPoint, OpenDocument Presentation | Google Слайды |
| JPEG, PNG, GIF, BMP, PDF | Google Docs (встраивает изображение в документ) |
| Обычный текст (специальный MIME-тип), JSON | Google Apps Script |
При загрузке и преобразовании медиафайлов в рамках запроса на update файлов Docs, Sheets или Slides, заменяется всё содержимое документа целиком.
При преобразовании изображения в документ Google Drive использует оптическое распознавание символов (OCR) для преобразования изображения в текст. Вы можете улучшить качество алгоритма OCR, указав соответствующий код языка BCP 47 в параметре ocrLanguage . Извлеченный текст отображается в документе рядом с встроенным изображением.
Используйте предварительно сгенерированный идентификатор для загрузки файлов.
API Google Диска позволяет получить список предварительно сгенерированных идентификаторов файлов, которые можно использовать для создания, копирования и загрузки ресурсов. Для получения дополнительной информации см. раздел «Генерация идентификаторов для использования с вашими файлами» .
В случае неопределенной ошибки сервера или превышения времени ожидания вы можете безопасно повторить загрузку файлов с предварительно сгенерированными идентификаторами. Если операция с файлом прошла успешно, последующие попытки возвращают HTTP-код состояния 409 Conflict , и дубликаты файлов не создаются.
Обратите внимание, что предварительно сгенерированные идентификаторы не поддерживаются для создания файлов Google Workspace, за исключением MIME-типов application/vnd.google-apps.drive-sdk и application/vnd.google-apps.folder . Аналогично, загрузка файлов, ссылающихся на преобразование в формат файла Google Workspace, не поддерживается.
Определите индексируемый текст для неизвестных типов файлов.
Пользователи могут использовать пользовательский интерфейс Google Диска для поиска содержимого документов. Вы также можете использовать метод list для ресурса files и поле fullText для поиска содержимого в вашем приложении. Для получения дополнительной информации см. раздел «Поиск файлов и папок» .
Google Drive автоматически индексирует документы для поиска, когда распознает тип файла, включая текстовые документы, PDF-файлы, изображения с текстом и другие распространенные типы. Если ваше приложение сохраняет другие типы файлов (например, рисунки, видео и ярлыки), вы можете улучшить возможность поиска, указав индексируемый текст в поле contentHints.indexableText файла.
Для получения дополнительной информации об индексируемом тексте см. раздел «Управление метаданными файла» .