API Google Drive позволяет загружать данные при создании или обновлении File
. Сведения о создании файла, содержащего только метаданные, например, папки, см. в разделе Создание файлов, содержащих только метаданные .
Вы можете выполнить три типа загрузки:
Простая загрузка (
uploadType=media
) : используйте этот тип загрузки для передачи небольшого медиафайла (5 МБ или меньше) без предоставления метаданных. Чтобы выполнить простую загрузку, см. раздел Выполнение простой загрузки .Многокомпонентная загрузка (
uploadType=multipart
) : «Используйте этот тип загрузки для передачи небольшого файла (5 МБ или меньше) вместе с метаданными, описывающими файл, в одном запросе. Чтобы выполнить многокомпонентную загрузку, см. раздел Выполнение многокомпонентной загрузки ».Возобновляемая загрузка (
uploadType=resumable
) : используйте этот тип загрузки для больших файлов (более 5 МБ) и при высокой вероятности сбоя сети, например, при создании файла в мобильном приложении. Возобновляемая загрузка также подходит для большинства приложений, поскольку она работает и с небольшими файлами при минимальных затратах в один дополнительный HTTP-запрос на загрузку. Чтобы выполнить возобновляемую загрузку, см. раздел Выполнение возобновляемой загрузки .
Клиентские библиотеки API Google реализуют как минимум один из этих типов загрузки. Подробнее об использовании каждого типа см. в документации клиентской библиотеки.
Используйте 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 , который состоит из двух частей:
- Метаданные. Метаданные должны располагаться первыми и иметь заголовок
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"
. Последующие вызовы 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-адрес возобновляемого сеанса.
Продолжайте загружать контент .
Загрузить контент
Существует два способа загрузки файла с возобновляемым сеансом:
- Загрузка контента одним запросом : используйте этот подход, если файл можно загрузить одним запросом, если нет фиксированного ограничения по времени для отдельного запроса или вам не нужно отображать индикатор хода загрузки. Этот подход оптимален, поскольку требует меньше запросов и обеспечивает более высокую производительность.
Загружайте контент несколькими фрагментами : используйте этот подход, если необходимо сократить объём данных, передаваемых в одном запросе. Уменьшение объёма передаваемых данных может потребоваться при наличии фиксированного ограничения по времени для отдельных запросов, как это может быть в случае с определёнными классами запросов 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 error:rateLimitExceeded
. - При возникновении ошибок
4xx
(включая403
) во время возобновляемой загрузки перезапустите её. Эти ошибки указывают на то, что сеанс загрузки истёк и его необходимо перезапустить, запросив новый URI сеанса . Сеансы загрузки также завершаются через неделю бездействия.
Типы импорта в Google Docs
При создании файла на Диске вам может потребоваться преобразовать его в формат Google Workspace, например, в Google Docs или Google Sheets. Например, вы можете преобразовать документ из вашего любимого текстового редактора в формат Docs, чтобы воспользоваться его функциями.
Чтобы преобразовать файл в определенный тип файла Google Workspace, укажите mimeType
Google Workspace при создании файла.
Ниже показано, как преобразовать CSV-файл в таблицу Google Workspace:
Ява
Питон
Node.js
PHP
.СЕТЬ
Чтобы узнать, доступно ли преобразование, проверьте массив importFormats
ресурса about
перед созданием файла. Поддерживаемые преобразования доступны динамически в этом массиве. Вот некоторые распространённые форматы импорта:
От | К |
---|---|
Microsoft Word, OpenDocument Text, HTML, RTF, простой текст | Google Документы |
Microsoft Excel, OpenDocument Spreadsheet, CSV, TSV, простой текст | Google Таблицы |
Microsoft PowerPoint, презентация OpenDocument | Google Презентации |
JPEG, PNG, GIF, BMP, PDF | Google Docs (встраивает изображение в документ) |
Обычный текст (специальный тип MIME), JSON | Скрипт Google Apps |
При загрузке и конвертации медиафайлов во время запроса на update
файла Docs, Sheets или Slides заменяется все содержимое документа.
При конвертации изображения в документ Google Drive использует технологию оптического распознавания символов (OCR) для преобразования изображения в текст. Вы можете улучшить качество алгоритма OCR, указав соответствующий код языка BCP 47 в параметре ocrLanguage
. Извлечённый текст отображается в документе рядом со встроенным изображением.
Используйте предварительно сгенерированный идентификатор для загрузки файлов
API Диска позволяет получить список предварительно сгенерированных идентификаторов файлов, используемых для загрузки и создания ресурсов. Запросы на загрузку и создание файлов могут использовать эти предварительно сгенерированные идентификаторы. Задайте поле id
в метаданных файла.
Чтобы создать предварительно сгенерированные идентификаторы, вызовите files.generateIds
, указав количество идентификаторов, которые нужно создать.
Вы можете безопасно повторить загрузку с заранее сгенерированными идентификаторами в случае неопределённой ошибки сервера или тайм-аута. Если файл был успешно создан, последующие попытки возвращают ошибку HTTP 409
, и файлы-дубликаты не создаются.
Определить индексируемый текст для неизвестных типов файлов
Пользователи могут использовать интерфейс Drive для поиска содержимого документов. Вы также можете использовать files.list
и поле fullText
для поиска содержимого в вашем приложении. Подробнее см. в разделе Поиск файлов и папок .
Диск автоматически индексирует документы для поиска, когда распознаёт их тип, включая текстовые документы, PDF-файлы, изображения с текстом и другие распространённые типы. Если ваше приложение сохраняет другие типы файлов (например, рисунки, видео и ярлыки), вы можете улучшить их поиск, добавив индексируемый текст в поле contentHints.indexableText
файла.
Дополнительные сведения об индексируемом тексте см. в разделе Управление метаданными файла .