Загрузить данные файла

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

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

  1. Создайте запрос POST к URI /upload метода с параметром запроса uploadType=media :

    POST https://www.googleapis.com/upload/drive/v3/files?uploadType=media

  2. Добавьте данные файла в тело запроса.

  3. Добавьте эти заголовки HTTP:

    • Content-Type . Установите тип носителя MIME для загружаемого объекта.
    • Content-Length . Установите количество байтов, которые вы загружаете. Если вы используете кодирование передачи по частям, этот заголовок не требуется.
  4. Отправьте запрос. Если запрос выполнен успешно, сервер возвращает код состояния HTTP 200 OK вместе с метаданными файла. {HTTP}

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

Выполнить многокомпонентную загрузку

Составной запрос на загрузку позволяет загружать метаданные и данные в одном запросе. Используйте этот параметр, если отправляемые данные достаточно малы для повторной загрузки целиком в случае сбоя подключения.

Чтобы выполнить многокомпонентную загрузку, используйте метод files.create с uploadType=multipart .

Ниже показано, как выполнить многокомпонентную загрузку:

Джава

диск/фрагменты/drive_v3/src/main/java/UploadBasic.java
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.FileContent;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;

/* Class to demonstrate use of Drive insert file API */
public class UploadBasic {

  /**
   * Upload new file.
   *
   * @return Inserted file metadata if successful, {@code null} otherwise.
   * @throws IOException if service account credentials file not found.
   */
  public static String uploadBasic() throws IOException {
    // Load pre-authorized user credentials from the environment.
    // TODO(developer) - See https://developers.google.com/identity for
    // guides on implementing OAuth2 for your application.
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    Drive service = new Drive.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Drive samples")
        .build();
    // Upload file photo.jpg on drive.
    File fileMetadata = new File();
    fileMetadata.setName("photo.jpg");
    // File's content.
    java.io.File filePath = new java.io.File("files/photo.jpg");
    // Specify media type and file-path for file.
    FileContent mediaContent = new FileContent("image/jpeg", filePath);
    try {
      File file = service.files().create(fileMetadata, mediaContent)
          .setFields("id")
          .execute();
      System.out.println("File ID: " + file.getId());
      return file.getId();
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      System.err.println("Unable to upload file: " + e.getDetails());
      throw e;
    }
  }
}

питон

диск/фрагменты/диск-v3/файл_фрагмент/upload_basic.py
from __future__ import print_function

import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaFileUpload


def upload_basic():
    """Insert new file.
    Returns : Id's of the file uploaded

    Load pre-authorized user credentials from the environment.
    TODO(developer) - See https://developers.google.com/identity
    for guides on implementing OAuth2 for the application.
    """
    creds, _ = google.auth.default()

    try:
        # create drive api client
        service = build('drive', 'v3', credentials=creds)

        file_metadata = {'name': 'download.jpeg'}
        media = MediaFileUpload('download.jpeg',
                                mimetype='image/jpeg')
        # pylint: disable=maybe-no-member
        file = service.files().create(body=file_metadata, media_body=media,
                                      fields='id').execute()
        print(F'File ID: {file.get("id")}')

    except HttpError as error:
        print(F'An error occurred: {error}')
        file = None

    return file.get('id')


if __name__ == '__main__':
    upload_basic()

Node.js

диск/фрагменты/drive_v3/файл_фрагменты/upload_basic.js
/**
 * Insert new file.
 * @return{obj} file Id
 * */
async function uploadBasic() {
  const fs = require('fs');
  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});
  const fileMetadata = {
    name: 'photo.jpg',
  };
  const media = {
    mimeType: 'image/jpeg',
    body: fs.createReadStream('files/photo.jpg'),
  };
  try {
    const file = await service.files.create({
      resource: fileMetadata,
      media: media,
      fields: 'id',
    });
    console.log('File Id:', file.data.id);
    return file.data.id;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

диск/сниппеты/drive_v3/src/DriveUploadBasic.php
use Google\Client;
use Google\Service\Drive;
# TODO - PHP client currently chokes on fetching start page token
function uploadBasic()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $fileMetadata = new Drive\DriveFile(array(
        'name' => 'photo.jpg'));
        $content = file_get_contents('../files/photo.jpg');
        $file = $driveService->files->create($fileMetadata, array(
            'data' => $content,
            'mimeType' => 'image/jpeg',
            'uploadType' => 'multipart',
            'fields' => 'id'));
        printf("File ID: %s\n", $file->id);
        return $file->id;
    } catch(Exception $e) {
        echo "Error Message: ".$e;
    } 

}

.СЕТЬ

диск/фрагменты/drive_v3/DriveV3Snippets/UploadBasic.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Services;

namespace DriveV3Snippets
{
    // Class to demonstrate use of Drive insert file API
    public class UploadBasic
    {
        /// <summary>
        /// Upload new file.
        /// </summary>
        /// <param name="filePath">Image path to upload.</param>
        /// <returns>Inserted file metadata if successful, null otherwise.</returns>
        public static string DriveUploadBasic(string filePath)
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                    .CreateScoped(DriveService.Scope.Drive);

                // Create Drive API service.
                var service = new DriveService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive API Snippets"
                });

                // Upload file photo.jpg on drive.
                var fileMetadata = new Google.Apis.Drive.v3.Data.File()
                {
                    Name = "photo.jpg"
                };
                FilesResource.CreateMediaUpload request;
                // Create a new file on drive.
                using (var stream = new FileStream(filePath,
                           FileMode.Open))
                {
                    // Create a new file, with metadata and stream.
                    request = service.Files.Create(
                        fileMetadata, stream, "image/jpeg");
                    request.Fields = "id";
                    request.Upload();
                }

                var file = request.ResponseBody;
                // Prints the uploaded file id.
                Console.WriteLine("File ID: " + file.Id);
                return file.Id;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else if (e is FileNotFoundException)
                {
                    Console.WriteLine("File not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

HTTP

  1. Создайте запрос POST к URI /upload метода с параметром запроса uploadType=multipart :

    POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart

  2. Создайте тело запроса. Отформатируйте тело в соответствии с типом содержимого multipart/related [RFC 2387], которое состоит из 2 частей:

    • Метаданные. Метаданные должны быть первыми, и заголовок Content-Type должен иметь значение application/json; charset=UTF-8 . Добавьте метаданные файла в формате JSON.
    • Средства массовой информации. Носитель должен быть вторым и должен иметь заголовок Content-Type любого типа MIME. Добавьте данные файла в часть мультимедиа.

    Идентифицируйте каждую часть граничной строкой, которой предшествуют 2 дефиса. Кроме того, добавьте 2 дефиса после последней строки границы.

  3. Добавьте эти заголовки HTTP верхнего уровня:

    • Content-Type . Установите значение multipart/related и включите граничную строку, которую вы используете для идентификации различных частей запроса. Например: Content-Type: multipart/related; boundary=foo_bar_baz
    • Content-Length . Установите общее количество байтов в теле запроса.
  4. Отправьте запрос.

Чтобы создать или обновить только часть метаданных без связанных данных, отправьте запрос POST или PATCH на стандартную конечную точку ресурса: https://www.googleapis.com/drive/v3/files . Если запрос выполнен успешно, сервер возвращает Код состояния HTTP 200 OK вместе с метаданными файла.

При создании файлов они должны указать расширение файла в поле name файла. Например, при создании файла фотографии в формате JPEG вы можете указать что-то вроде "name": "photo.jpg" в метаданных. Последующие вызовы files.get возвращают доступное только для чтения свойство fileExtension , содержащее расширение, первоначально указанное в поле name .

Выполнить возобновляемую загрузку

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

Возобновляемая загрузка удобна, когда размеры ваших файлов могут сильно различаться или когда для запросов установлено фиксированное ограничение по времени (например, фоновые задачи мобильной ОС и определенные запросы App Engine). Вы также можете использовать возобновляемые загрузки для ситуаций, когда вы хотите показать индикатор выполнения загрузки.

Возобновляемая загрузка состоит из нескольких высокоуровневых шагов:

  1. Отправьте первоначальный запрос и получите URI возобновляемого сеанса.
  2. Загрузите данные и отслеживайте состояние загрузки.
  3. (необязательно) Если загрузка нарушена, возобновите загрузку.

Отправить первоначальный запрос

Чтобы инициировать возобновляемую загрузку, используйте метод files.create с uploadType=resumable .

HTTP

  1. Создайте запрос 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 возобновляемого сеанса истекает через неделю.

  2. Если у вас есть метаданные для файла, добавьте метаданные в тело запроса в формате JSON. В противном случае оставьте тело запроса пустым.

  3. Добавьте эти заголовки HTTP:

    • X-Upload-Content-Type . Необязательный. Установите тип MIME файловых данных, которые передаются в последующих запросах. Если MIME-тип данных не указан в метаданных или в этом заголовке, объект обслуживается как application/octet-stream.
    • X-Upload-Content-Length . Необязательный. Установите количество байтов файловых данных, которые передаются в последующих запросах.
    • Content-Type . Требуется, если у вас есть метаданные для файла. Установите application/json; charset=UTF-8 .
    • Content-Length . Требуется, если вы не используете кодирование передачи по частям. Установите количество байтов в теле этого исходного запроса.
  4. Отправьте запрос. Если запрос на инициацию сеанса выполнен успешно, ответ включает код состояния 200 OK HTTP . Кроме того, ответ включает заголовок Location , который указывает URI возобновляемого сеанса. Используйте URI возобновляемого сеанса, чтобы загрузить данные файла и запросить статус загрузки. Срок действия URI возобновляемого сеанса истекает через неделю.

  5. Скопируйте и сохраните возобновляемый URL-адрес сеанса.

  6. Продолжайте загружать контент .

Загрузить содержимое

Есть 2 способа загрузить файл с возобновляемой сессией:

  • Загружать содержимое одним запросом. Используйте этот подход, если файл можно загрузить за один запрос, если нет фиксированного ограничения по времени для любого отдельного запроса или вам не нужно отображать индикатор выполнения загрузки. Этот подход лучше всего, поскольку он требует меньше запросов и обеспечивает более высокую производительность.
  • Загружайте контент несколькими порциями — используйте этот подход, если вам нужно уменьшить объем данных, передаваемых в любом отдельном запросе. Вам может потребоваться уменьшить количество передаваемых данных, если для отдельных запросов установлено фиксированное ограничение по времени, как это может быть в случае с определенными классами запросов App Engine. Этот подход также полезен, если вы должны предоставить настраиваемый индикатор для отображения хода загрузки.

HTTP — одиночный запрос

  1. Создайте запрос PUT на URI возобновляемого сеанса.
  2. Добавьте данные файла в тело запроса.
  3. Добавьте HTTP-заголовок Content-Length, равный количеству байтов в файле.
  4. Отправьте запрос. Если запрос на загрузку прерван или вы получили ответ 5xx , выполните процедуру, описанную в разделе Возобновление прерванной загрузки .

HTTP - несколько запросов

  1. Создайте запрос PUT на URI возобновляемого сеанса.

  2. Добавьте данные чанка в тело запроса. Создавайте фрагменты размером, кратным 256 КБ (256 x 1024 байт), за исключением последнего фрагмента, который завершает загрузку. Сохраняйте размер фрагмента как можно большим, чтобы загрузка была эффективной.

  3. Добавьте эти заголовки HTTP:

    • Content-Length . Установите количество байтов в текущем фрагменте.
    • Content-Range . Установите, чтобы показать, какие байты в файле, который вы загружаете. Например, Content-Range: bytes 0-524287/2000000 показывает, что вы отправляете первые 524 288 байт (256 x 1024 x 2) в файле размером 2 000 000 байт.
  4. Отправьте запрос и обработайте ответ. Если запрос на загрузку прерван или вы получили ответ 5xx , выполните процедуру, описанную в разделе Возобновление прерванной загрузки .

  5. Повторите шаги с 1 по 4 для каждого фрагмента, оставшегося в файле. Используйте заголовок Range в ответе, чтобы определить, с чего начать следующий фрагмент. Не предполагайте, что сервер получил все байты, отправленные в предыдущем запросе.

Когда загрузка всего файла будет завершена, вы получите ответ 200 OK или 201 Created вместе со всеми метаданными, связанными с ресурсом.

Возобновить прерванную загрузку

Если запрос на загрузку завершается до ответа или если вы получаете ответ 503 Service Unavailable , вы должны возобновить прерванную загрузку.

HTTP

  1. Чтобы запросить статус загрузки, создайте пустой запрос PUT на URI возобновляемого сеанса.

  2. Добавьте заголовок Content-Range , чтобы указать, что текущая позиция в файле неизвестна. Например, установите для параметра Content-Range значение */2000000 , если общая длина файла составляет 2 000 000 байт. Если вы не знаете полный размер файла, установите для параметра Content-Range значение */* .

  3. Отправьте запрос.

  4. Обработайте ответ:

    • Ответ 200 OK или 201 Created указывает на то, что загрузка завершена и дальнейших действий не требуется.
    • Ответ 308 Resume Incomplete указывает на то, что вам нужно продолжить загрузку файла.
    • Ответ 404 Not Found указывает на то, что срок действия сеанса загрузки истек, и загрузку необходимо перезапустить с самого начала.
  5. Если вы получили ответ 308 Resume Incomplete , обработайте заголовок Range ответа, чтобы определить, какие байты получил сервер. Если в ответе нет заголовка Range , байты не были получены. Например, заголовок Range bytes=0-42 указывает, что первые 43 байта файла были получены и что следующий фрагмент для загрузки будет начинаться с 44-го байта.

  6. Теперь, когда вы знаете, где возобновить загрузку, продолжайте загружать файл, начиная со следующего байта. Включите заголовок 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:

Джава

диск/фрагменты/drive_v3/src/main/java/UploadWithConversion.java
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.FileContent;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;

/* Class to demonstrate Drive's upload with conversion use-case. */
public class UploadWithConversion {

  /**
   * Upload file with conversion.
   *
   * @return Inserted file id if successful, {@code null} otherwise.
   * @throws IOException if service account credentials file not found.
   */
  public static String uploadWithConversion() throws IOException {
    // Load pre-authorized user credentials from the environment.
    // TODO(developer) - See https://developers.google.com/identity for
    // guides on implementing OAuth2 for your application.
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    Drive service = new Drive.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Drive samples")
        .build();

    // File's metadata.
    File fileMetadata = new File();
    fileMetadata.setName("My Report");
    fileMetadata.setMimeType("application/vnd.google-apps.spreadsheet");

    java.io.File filePath = new java.io.File("files/report.csv");
    FileContent mediaContent = new FileContent("text/csv", filePath);
    try {
      File file = service.files().create(fileMetadata, mediaContent)
          .setFields("id")
          .execute();
      System.out.println("File ID: " + file.getId());
      return file.getId();
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      System.err.println("Unable to move file: " + e.getDetails());
      throw e;
    }
  }
}

Питон

диск/фрагменты/диск-v3/фрагмент_файла/upload_with_conversion.py
from __future__ import print_function

import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from googleapiclient.http import MediaFileUpload


def upload_with_conversion():
    """Upload file with conversion
    Returns: ID of the file uploaded

    Load pre-authorized user credentials from the environment.
    TODO(developer) - See https://developers.google.com/identity
    for guides on implementing OAuth2 for the application.
    """
    creds, _ = google.auth.default()

    try:
        # create drive api client
        service = build('drive', 'v3', credentials=creds)

        file_metadata = {
            'name': 'My Report',
            'mimeType': 'application/vnd.google-apps.spreadsheet'
        }
        media = MediaFileUpload('report.csv', mimetype='text/csv',
                                resumable=True)
        # pylint: disable=maybe-no-member
        file = service.files().create(body=file_metadata, media_body=media,
                                      fields='id').execute()
        print(F'File with ID: "{file.get("id")}" has been uploaded.')

    except HttpError as error:
        print(F'An error occurred: {error}')
        file = None

    return file.get('id')


if __name__ == '__main__':
    upload_with_conversion()

Node.js

диск/фрагменты/диск_v3/фрагменты_файла/upload_with_conversion.js
/**
 * Upload file with conversion
 * @return{obj} file Id
 * */
async function uploadWithConversion() {
  const fs = require('fs');
  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});
  const fileMetadata = {
    name: 'My Report',
    mimeType: 'application/vnd.google-apps.spreadsheet',
  };
  const media = {
    mimeType: 'text/csv',
    body: fs.createReadStream('files/report.csv'),
  };

  try {
    const file = await service.files.create({
      resource: fileMetadata,
      media: media,
      fields: 'id',
    });
    console.log('File Id:', file.data.id);
    return file.data.id;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

диск/фрагменты/drive_v3/src/DriveUploadWithConversion.php
use Google\Client;
use Google\Service\Drive;
function uploadWithConversion()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $fileMetadata = new Drive\DriveFile(array(
            'name' => 'My Report',
            'mimeType' => 'application/vnd.google-apps.spreadsheet'));
        $content = file_get_contents('../files/report.csv');
        $file = $driveService->files->create($fileMetadata, array(
            'data' => $content,
            'mimeType' => 'text/csv',
            'uploadType' => 'multipart',
            'fields' => 'id'));
        printf("File ID: %s\n", $file->id);
        return $file->id;
    } catch(Exception $e) {
        echo "Error Message: ".$e;
    }

}

.СЕТЬ

диск/фрагменты/drive_v3/DriveV3Snippets/UploadWithConversion.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Services;

namespace DriveV3Snippets
{
    // Class to demonstrate Drive's upload with conversion use-case.
    public class UploadWithConversion
    {
        /// <summary>
        /// Upload file with conversion.
        /// </summary>
        /// <param name="filePath">Id of the spreadsheet file.</param>
        /// <returns>Inserted file id if successful, null otherwise.</returns>
        public static string DriveUploadWithConversion(string filePath)
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                    .CreateScoped(DriveService.Scope.Drive);

                // Create Drive API service.
                var service = new DriveService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive API Snippets"
                });

                // Upload file My Report on drive.
                var fileMetadata = new Google.Apis.Drive.v3.Data.File()
                {
                    Name = "My Report",
                    MimeType = "application/vnd.google-apps.spreadsheet"
                };
                FilesResource.CreateMediaUpload request;
                // Create a new drive.
                using (var stream = new FileStream(filePath,
                           FileMode.Open))
                {
                    // Create a new file, with metadata and stream.
                    request = service.Files.Create(
                        fileMetadata, stream, "text/csv");
                    request.Fields = "id";
                    request.Upload();
                }

                var file = request.ResponseBody;
                // Prints the uploaded file id.
                Console.WriteLine("File ID: " + file.Id);
                return file.Id;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else if (e is FileNotFoundException)
                {
                    Console.WriteLine("File not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

Чтобы узнать, доступно ли преобразование, проверьте массив 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 файла.

Дополнительные сведения об индексируемом тексте см. в разделе Управление метаданными файла .