API Google Диска позволяет загружать данные файла при создании или обновлении File
. Информацию о том, как создать File
, содержащий только метаданные, см. в разделе Создание файлов .
Вы можете выполнить 3 типа загрузки:
Простая загрузка (
uploadType=media
) — используйте этот тип загрузки для передачи небольшого медиафайла (5 МБ или меньше) без предоставления метаданных. Чтобы выполнить простую загрузку, см. Выполнение простой загрузки .Многокомпонентная загрузка (
uploadType=multipart
) — используйте этот тип загрузки для передачи небольшого файла (5 МБ или меньше) вместе с метаданными, описывающими файл, в одном запросе. Чтобы выполнить многокомпонентную загрузку, см. Выполнение многокомпонентной загрузки .Возобновляемая загрузка (
uploadType=resumable
) — используйте этот тип загрузки для больших файлов (более 5 МБ) и когда есть высокая вероятность прерывания сети, например, при создании файла из мобильного приложения. Возобновляемая загрузка также является хорошим выбором для большинства приложений, поскольку она работает и с небольшими файлами при минимальной стоимости одного дополнительного HTTP-запроса на загрузку. Чтобы выполнить возобновляемую загрузку, см. Выполнение возобновляемой загрузки .
Клиентские библиотеки Google API реализуют по крайней мере один из этих типов загрузки. Дополнительные сведения об использовании каждого из типов см. в документации по клиентской библиотеке .
Используйте PATCH
вместо PUT
Напомним, что HTTP-глагол PATCH
поддерживает частичное обновление файловых ресурсов, тогда как HTTP-глагол PUT
поддерживает полную замену ресурсов. Обратите внимание, что PUT
может внести критические изменения при добавлении нового поля в существующий ресурс.
При загрузке файлового ресурса руководствуйтесь следующими рекомендациями:
- Используйте HTTP-глагол, описанный в справочнике по API, для первоначального запроса возобновляемой загрузки или для единственного запроса простой или составной загрузки.
- Используйте
PUT
для всех последующих запросов на возобновляемую загрузку после запуска запроса. Эти запросы загружают контент независимо от вызываемого метода.
Выполните простую загрузку
Чтобы выполнить простую загрузку, используйте метод files.create с 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
время. Вы можете использовать простую загрузку в случаях, когда у вас небольшие файлы и метаданные файлов не важны.
Выполнить многокомпонентную загрузку
Составной запрос на загрузку позволяет загружать метаданные и данные в одном запросе. Используйте этот параметр, если отправляемые данные достаточно малы для повторной загрузки целиком в случае сбоя подключения.
Чтобы выполнить многокомпонентную загрузку, используйте метод files.create с uploadType=multipart
.
Ниже показано, как выполнить многокомпонентную загрузку:
Джава
питон
Node.js
PHP
.СЕТЬ
HTTP
Создайте запрос
POST
к URI /upload метода с параметром запросаuploadType=multipart
:POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart
Создайте тело запроса. Отформатируйте тело в соответствии с типом содержимого multipart/related [RFC 2387], которое состоит из 2 частей:
- Метаданные. Метаданные должны быть первыми, и заголовок
Content-Type
должен иметь значениеapplication/json;
charset=UTF-8
. Добавьте метаданные файла в формате JSON. - Средства массовой информации. Носитель должен быть вторым и должен иметь заголовок
Content-Type
любого типа MIME. Добавьте данные файла в часть мультимедиа.
Идентифицируйте каждую часть граничной строкой, которой предшествуют 2 дефиса. Кроме того, добавьте 2 дефиса после последней строки границы.
- Метаданные. Метаданные должны быть первыми, и заголовок
Добавьте эти заголовки 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"
в метаданных. Последующие вызовы files.get возвращают доступное только для чтения свойство fileExtension
, содержащее расширение, первоначально указанное в поле name
.
Выполнить возобновляемую загрузку
Возобновляемая загрузка позволяет возобновить операцию загрузки после того, как сбой связи прервет поток данных. Поскольку вам не нужно перезапускать загрузку больших файлов с самого начала, возобновляемая загрузка также может снизить использование полосы пропускания в случае сбоя сети.
Возобновляемая загрузка удобна, когда размеры ваших файлов могут сильно различаться или когда для запросов установлено фиксированное ограничение по времени (например, фоновые задачи мобильной ОС и определенные запросы App Engine). Вы также можете использовать возобновляемые загрузки для ситуаций, когда вы хотите показать индикатор выполнения загрузки.
Возобновляемая загрузка состоит из нескольких высокоуровневых шагов:
- Отправьте первоначальный запрос и получите URI возобновляемого сеанса.
- Загрузите данные и отслеживайте состояние загрузки.
- (необязательно) Если загрузка нарушена, возобновите загрузку.
Отправить первоначальный запрос
Чтобы инициировать возобновляемую загрузку, используйте метод files.create с 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-адрес сеанса.
Продолжайте загружать контент .
Загрузить содержимое
Есть 2 способа загрузить файл с возобновляемой сессией:
- Загружать содержимое одним запросом. Используйте этот подход, если файл можно загрузить за один запрос, если нет фиксированного ограничения по времени для любого отдельного запроса или вам не нужно отображать индикатор выполнения загрузки. Этот подход лучше всего, поскольку он требует меньше запросов и обеспечивает более высокую производительность.
Загружайте контент несколькими порциями — используйте этот подход, если вам нужно уменьшить объем данных, передаваемых в любом отдельном запросе. Вам может потребоваться уменьшить количество передаваемых данных, если для отдельных запросов установлено фиксированное ограничение по времени, как это может быть в случае с определенными классами запросов 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
см. в разделе Устранение ошибки5xx
. - Если ошибка
403 rate limit
, повторите попытку загрузки. Дополнительные сведения об обработке ошибок403 rate limit
см. в разделе403 error: Rate limit exceeded
. - Для любых ошибок
4xx
(включая403
) во время возобновляемой загрузки перезапустите загрузку. Эти ошибки указывают на то, что срок действия сеанса загрузки истек и его необходимо перезапустить, запросив новый URI сеанса . Сеансы загрузки также истекают через неделю бездействия.
Импортировать в Google Docs типы
Когда вы создаете файл на Диске, вы можете преобразовать его в тип файла Google Workspace, например Google Doc или Google Sheet. Например, может быть, вы хотите преобразовать документ из вашего любимого текстового процессора в документ Google, чтобы воспользоваться его функциями.
Чтобы преобразовать файл в определенный тип файла Google Workspace, укажите mimeType
Google Workspace при создании файла.
Ниже показано, как преобразовать файл CSV в лист Google Workspace:
Джава
Питон
Node.js
PHP
.СЕТЬ
Чтобы узнать, доступно ли преобразование, проверьте массив importFormats
ресурса About перед созданием файла. Поддерживаемые преобразования доступны динамически в этом массиве. Некоторые распространенные форматы импорта:
Из | К |
---|---|
Microsoft Word, OpenDocument Text, HTML, RTF, обычный текст | Гугл документы |
Microsoft Excel, электронные таблицы OpenDocument, CSV, TSV, обычный текст | Google Таблицы |
Microsoft PowerPoint, презентация OpenDocument | Google Презентации |
JPEG, PNG, GIF, BMP, PDF | Документы Google (встраивает изображение в документ) |
Обычный текст (специальный тип MIME), JSON | Скрипт Google Apps |
Когда вы загружаете и конвертируете мультимедиа во время запроса на update
в документ, лист или слайд, все содержимое документа заменяется.
Когда вы конвертируете изображение в документ, Диск использует оптическое распознавание символов (OCR) для преобразования изображения в текст. Вы можете улучшить качество алгоритма OCR, указав применимый код языка BCP 47 в параметре ocrLanguage
. Извлеченный текст появляется в документе вместе со встроенным изображением.
Используйте предварительно сгенерированный идентификатор для загрузки файлов
API Drive позволяет получить список предварительно созданных идентификаторов файлов, которые используются для загрузки и создания ресурсов. Запросы на загрузку и создание файлов могут использовать эти предварительно сгенерированные идентификаторы. Задайте поле id
в метаданных файла.
Чтобы создать предварительно сгенерированные идентификаторы, вызовите file.generateIds с количеством создаваемых идентификаторов.
Вы можете безопасно повторить загрузку с предварительно сгенерированными идентификаторами в случае неопределенной ошибки сервера или тайм-аута. Если файл был успешно создан, последующие попытки возвращают ошибку HTTP 409
и не создают повторяющихся файлов.
Определить индексируемый текст для неизвестных типов файлов
Пользователи могут использовать пользовательский интерфейс Диска для поиска содержимого документа. Вы также можете использовать files.list и поле fullText
для поиска контента из вашего приложения. Дополнительные сведения см. в разделе Поиск файлов и папок .
Диск автоматически индексирует документы для поиска, когда распознает тип файла, включая текстовые документы, PDF-файлы, изображения с текстом и другие распространенные типы. Если ваше приложение сохраняет другие типы файлов (такие как рисунки, видео и ярлыки), вы можете улучшить обнаружение, указав индексируемый текст в поле contentHints.indexableText
файла.
Дополнительные сведения об индексируемом тексте см. в разделе Управление метаданными файла .