ファイル データをアップロードする

Google Drive API を使用すると、ファイルを作成または更新するときに、 File。Google Cloud Storage バケットの作成方法については、 メタデータのみのファイル(フォルダなど)については、メタデータのみのファイルを作成するをご覧ください。

実行できるアップロードには次の 3 種類があります。

  • シンプル アップロード(uploadType=media: このアップロード タイプを使用して、 小さなメディア ファイル(5 MB 以下)。メタデータは提供されません。ルールを シンプル アップロードについては、シンプル アップロードを実行するをご覧ください。

  • マルチパート アップロード(uploadType=multipart: 「このアップロード タイプを使用して、 小さなファイル(5 MB 以下)と、そのファイルの内容を記述した 1 回のリクエストで出力されます。マルチパート アップロードの実行方法については、 マルチパート アップロードを使用します。

  • 再開可能なアップロード(uploadType=resumable: このアップロードの種類は、 サイズの大きなファイル(5 MB 超)や、ネットワーク通信の可能性が高い 中断されることがあります。再開可能 アップロードもほとんどのアプリケーションに適しています。 アップロードごとに HTTP リクエストを 1 つ追加するという最低限の費用で、小さなファイルを 1 か所で管理できます。 再開可能なアップロードを実行するには、再開可能なアップロードを実行する アップロードします

Google API クライアント ライブラリには、次のタイプの少なくとも 1 つが実装されています。 アップロードします。クライアント ライブラリを参照 ドキュメントをご覧ください。 各タイプを使用します。

PATCHPUT の比較

おさらいすると、HTTP 動詞 PATCH は部分的なファイル リソースの更新をサポートしています。 HTTP 動詞 PUT はリソースの完全な置換をサポートしています。なお、PUT 新しいフィールドを既存のリソースに追加するときに、互換性を損なう変更が行われる可能性がある。

ファイル リソースをアップロードする場合は、次のガイドラインを使用してください。

  • API リファレンスに記載されている HTTP 動詞を使用して、 単一またはマルチパート アップロードの唯一のリクエストに対して行われます。
  • 再開可能なアップロードの後続のリクエストには、PUT を使用します。 開始しました。これらのリクエストでは、 渡されます。

シンプル アップロードを実行する

シンプル アップロードを実行するには、 files.create メソッド uploadType=media

シンプル アップロードの実行方法は次のとおりです。

HTTP

  1. クエリを使用して、メソッドの /upload URI への POST リクエストを作成します。 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

マルチパート アップロードの実行方法は次のとおりです。

Java

drive/snippets/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;
    }
  }
}

Python

drive/snippets/drive-v3/file_snippet/upload_basic.py
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/snippets/drive_v3/file_snippets/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 requestBody = {
    name: 'photo.jpg',
    fields: 'id',
  };
  const media = {
    mimeType: 'image/jpeg',
    body: fs.createReadStream('files/photo.jpg'),
  };
  try {
    const file = await service.files.create({
      requestBody,
      media: media,
    });
    console.log('File Id:', file.data.id);
    return file.data.id;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/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;
    } 

}

.NET

drive/snippets/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. クエリを使用して、メソッドの /upload URI への POST リクエストを作成します。 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 形式で返されます。
    • メディア。メディアは 2 番目にあり、Content-Type ヘッダーが必要です 任意の MIME タイプの画像を生成します。ファイルのデータをメディア部分に追加します。

    最初の境界文字列の前に 2 個のハイフンを付けて、各部分を区別します。さらに、最後の境界文字列の後に 2 個のハイフンを追加します。

  3. 以下の最上位の HTTP ヘッダーを追加します。

    • Content-Typemultipart/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 フィールドで最初に指定された拡張子を含む)。

再開可能なアップロードを実行する

再開可能なアップロードでは、通信後にアップロード操作を再開できます。 データフローが中断されます。大規模な VM インスタンスを再起動する必要がないため、 再開可能であるため、帯域幅が減る可能性もあります。 費用を節約できます

再開可能なアップロードは、ファイルサイズが大きく異なる場合や、 リクエスト(モバイル OS のバックグラウンド タスクや 特定の App Engine リクエストなど)に適用されます。また、再開可能なアップロードを アップロードの進行状況バーを表示したい場合に便利です。

再開可能なアップロードは、いくつかの大まかな手順で構成されます。

  1. 最初のリクエストを送信して再開可能セッション URI を取得します。
  2. データをアップロードし、アップロードの状態をモニタリングします。
  3. (省略可)アップロードが中断された場合は、アップロードを再開します。

最初のリクエストを送信する

再開可能なアップロードを開始するには、 files.create メソッド uploadType=resumable

HTTP

  1. クエリを使用して、メソッドの /upload URI への POST リクエストを作成します。 uploadType=resumable のパラメータ:

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

    開始リクエストが成功すると、レスポンスには 200 OK が含まれます。 HTTP ステータス コード。また、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 は 1 週間後に期限切れになります。

  2. ファイルのメタデータがある場合は、リクエスト本文にメタデータを追加します。 JSON 形式で返されます。それ以外の場合には、リクエストの本文は空にしておきます。

  3. 次の HTTP ヘッダーを追加します。

    • X-Upload-Content-Type。省略できます。ファイルデータの MIME タイプに設定します。これは、後続のリクエストで転送されます。MIME タイプが メタデータまたはこのヘッダーで指定されていないデータ オブジェクトは application/octet-stream. として提供されます。
    • X-Upload-Content-Length。省略できます。Cloud Storage バケットに転送されるバイト数を 後続のリクエストで転送されます。
    • Content-Type。ファイルにメタデータがある場合には必須です。次に設定 application/json; charset=UTF-8
    • Content-Length。チャンク転送エンコードを使用する場合を除き必須。 最初のリクエストの本文のバイト数に設定します。
  4. リクエストを送信します。 セッション開始リクエストが成功すると、 レスポンスに 200 OK HTTP ステータス コードが含まれる。さらに レスポンスが 再開可能セッション URI を指定する Location ヘッダーが含まれている。 再開可能セッション URI を使用してファイルデータをアップロードし、 ステータスが表示されます。再開可能セッション URI は 1 週間後に期限切れになります。

  5. 再開可能セッションの URL をコピーして保存します。

  6. コンテンツをアップロードするに進みます。

コンテンツをアップロードする

再開可能なセッションでファイルをアップロードするには、2 つの方法があります。

  • 1 回のリクエストでコンテンツをアップロードする: この方法は、ファイルがアップロードできる場合に使用してください。 1 回のリクエストでアップロードできる(1 つのリクエストに一定の時間制限がない場合) アップロード進行状況インジケーターを表示する必要がないかを指定できます。この アプローチが最適であるのは、必要なリクエストが少なく、結果的に 向上します
  • コンテンツを複数のチャンクでアップロードする: 必要な場合は、この方法を使用します。 1 回のリクエストで転送されるデータ量を減らすことができます。必要に応じて ユーザーごとに一定の時間制限がある場合に、転送するデータを減らす App Engine リクエストの一部のクラスでは使用できます。 このアプローチは、カスタム インジケーターを用意する必要がある場合にも有用です。 アップロードの進行状況を表示します。

HTTP - 単一リクエスト

  1. 再開可能なセッションの URI に PUT リクエストを作成します。
  2. ファイルのデータをリクエストの本文に追加します。
  3. Content-Length HTTP ヘッダーを追加し、ファイルのバイト数に設定します。
  4. リクエストを送信します。 アップロード リクエストが中断された場合や、 5xx という応答がない場合は、中断されたアップロードを再開するの手順に沿って操作してください。

HTTP - 複数のリクエスト

  1. 再開可能なセッションの URI に PUT リクエストを作成します。

  2. リクエストの本文にチャンクのデータを追加します。サイズが 256 KB(256 x 1,024 バイト)の倍数になるようにチャンクを作成します(アップロードを完了する最後のチャックは除く)。アップロードを効率的に行うため、チャンクサイズはできるだけ大きくしてください。

  3. 次の HTTP ヘッダーを追加します。

    • Content-Length。現在のチャンクのバイト数を設定します。
    • Content-Range。アップロードするファイルのバイト数を示すように設定します。対象 たとえば、Content-Range: bytes 0-524287/2000000 は、 最初の 524,288 バイト(256 x 1,024 x 2)を 2,000,000 バイトのファイルで作成します。
  4. リクエストを送信してレスポンスを処理します。アップロード リクエストが 5xx のレスポンスを受け取った場合は、 中断されたアップロードを再開する

  5. ファイルに残っているチャンクごとに、ステップ 1 から 4 を繰り返します。こちらの レスポンスの Range ヘッダーを使用して、次のチャンクの開始位置を決定します。 前のリクエストで送信したバイトがすべてサーバーで受信されたとは限りません。

ファイル全体のアップロードが完了すると、200 OK または 201 Created レスポンスと、リソースに関連付けられたメタデータ。

中断されたアップロードを再開する

アップロード リクエストがレスポンスの前に終了した場合や、503 Service Unavailable レスポンスを受け取った場合は、中断されたアップロードを再開する必要があります。

HTTP

  1. アップロードのステータスを取得するため、再開可能なセッションの URI に空の PUT リクエストを作成します。

  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 エラーの処理について詳しくは、以下をご覧ください。 500、502、503、504 エラー
  • 403 rate limit エラーが発生した場合は、アップロードを再試行してください。詳細については、このモジュールの 403 rate limit エラーの処理については、403 error: rateLimitExceeded
  • 再開可能なアップロード中に 4xx エラー(403 など)が発生した場合は、再起動してください 行われます。これらのエラーは、アップロード セッションの有効期限が切れたことを示しており、アップロードする必要があります。 新しいセッション URI をリクエストして再起動する。セッションをアップロードする 1 週間非アクティブな状態が続くと、期限切れになります。

Google ドキュメントの種類にインポート

ドライブでファイルを作成する際に、 Google Workspace のファイル形式(Google ドキュメントや スプレッドシート。たとえば、1 つ目の Google Cloud プロダクトから お気に入りのワード プロセッサをドキュメントに変換し、 説明します。

ファイルを特定の Google Workspace ファイル形式に変換するには、 ファイルの作成時に Google Workspace のmimeType

CSV ファイルを Google Workspace シートに変換する方法は以下のとおりです。

Java

drive/snippets/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;
    }
  }
}

Python

drive/snippets/drive-v3/file_snippet/upload_with_conversion.py
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

drive/snippets/drive_v3/file_snippets/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({
      requestBody: 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/snippets/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;
    }

}

.NET

drive/snippets/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;
        }
    }
}

コンバージョンを使用できるかどうかを確認するには、ファイルを作成する前に about リソースの importFormats 配列を確認します。 サポートされているコンバージョンは、この配列で動的に利用できます。一般的な インポート形式:

From終了日
Microsoft Word、OpenDocument Text、HTML、RTF、書式なしテキストGoogle ドキュメント
Microsoft Excel、OpenDocument スプレッドシート、CSV、TSV、書式なしテキストGoogle スプレッドシート
Microsoft PowerPoint、OpenDocument プレゼンテーションGoogle Slides
JPEG、PNG、GIF、BMP、PDFGoogle ドキュメント(ドキュメントに画像が埋め込まれる)
書式なしテキスト(特殊な MIME タイプ)、JSONGoogle Apps Script

update リクエスト中にメディアをアップロードして、 スプレッドシート、スライドのファイルや ドキュメントのすべてのコンテンツが置き換えられます。

画像をドキュメントに変換すると、ドライブでは 光学式文字認識(OCR)を使用して、画像をテキストに変換します。Google Chat では 該当する BCP を指定することで OCR アルゴリズムの品質を向上 47 の言語コード の ocrLanguage パラメータを指定します。抽出されたテキストは、埋め込まれた画像とともにドキュメントに表示されます。

事前に生成された ID を使用してファイルをアップロードする

Drive API を使用すると、事前に生成されたファイル ID のリストを取得できます。 リソースのアップロードと作成に使用します。アップロードやファイル作成のリクエストは 事前に生成された ID を使用しますファイル メタデータの id フィールドを設定します。

事前に生成された ID を作成するには、次の呼び出しを呼び出します。 files.generateIds は、 作成する ID の数を指定します。

不確定要素がある場合は、事前に生成された ID を使用してアップロードを安全に再試行できます。 サーバーエラーやタイムアウトが発生しました。ファイルが正常に作成された場合、以降の 再試行すると HTTP 409 エラーが返され、重複するファイルは作成されません。

不明なファイル形式のインデックス登録可能なテキストを定義する

ユーザーはドライブの UI を使用してドキュメントのコンテンツを検索できます。また、 files.listfullText を使用する フィールドを使用してアプリのコンテンツを検索できます。詳しくは、 管理する方法を学びました。

ドライブは、ドキュメントを自動的にインデックスに登録し、 は、テキスト ドキュメント、PDF、テキスト付きの画像などのファイル形式を認識し、 使用できます。その他の種類のファイル(図形描画、 動画、ショートカットなど)を提供する場合、 ファイルの contentHints.indexableText フィールドのインデックス登録可能なテキスト。

インデックス登録可能なテキストの詳細については、ファイルを管理する metadata です。