Google Drive API を使用すると、
File の作成時または更新時にファイルデータをアップロードできます。フォルダなどの
メタデータのみのファイルを作成する方法については、メタデータのみのファイルを作成するをご覧ください。
実行できるアップロードには、次の 3 種類があります。
単純なアップロード(
uploadType=media): このアップロード タイプは、メタデータを提供せずに小さなメディア ファイル(5 MB 以下)を転送する場合に使用します。単純なアップロードを実行するには、単純なアップロードを実行するをご覧ください。マルチパート アップロード(
uploadType=multipart): このアップロード タイプは、ファイルを表すメタデータとともに小さなファイル(5 MB 以下)を単一のリクエストで転送する場合に使用します。マルチパート アップロードを実行するには、マルチパート アップロードを実行するをご覧ください。再開可能なアップロード(
uploadType=resumable): このアップロード タイプは、大容量ファイル(5 MB 超)の場合や、モバイルアプリからファイルを作成する場合など、ネットワークが中断する可能性が高い場合に使用します。再開可能なアップロードは、アップロードごとに 1 つの HTTP リクエストを送信するだけで、サイズの小さなファイルでも利用できるため、ほとんどのアプリケーションに適しています。 再開可能なアップロードを実行するには、再開可能な アップロードをご覧ください。
Google API クライアント ライブラリは、これらのアップロード タイプのうち少なくとも 1 つを実装しています。各タイプの使用方法の詳細については、クライアント ライブラリ ドキュメントをご覧ください。
PATCH と PUT の使い分け
復習として、HTTP 動詞 PATCH はファイル リソースの部分的な更新をサポートしますが、HTTP 動詞 PUT はリソースの完全な置き換えをサポートします。PUT を使用すると、既存のリソースに新しいフィールドを追加するときに、互換性を損なう変更が発生する可能性があります。
ファイル リソースをアップロードする場合は、次のガイドラインに従ってください。
- 再開可能なアップロードの最初のリクエスト、または単純なアップロードまたはマルチパート アップロードの唯一のリクエストには、API リファレンスに記載されている HTTP 動詞を使用します。
- リクエストが開始されたら、再開可能なアップロードの後続のリクエストにはすべて
PUTを使用します。これらのリクエストは、呼び出されるメソッドに関係なく、コンテンツをアップロードします。
単純なアップロードを実行する
単純なアップロードを実行するには、create
メソッドをfiles リソースで
uploadType=media使用します。
以下に、単純なアップロードを実行する方法を示します。
HTTP
クエリ パラメータ
uploadType=mediaを指定して、メソッドの /upload URI にPOSTリクエストを作成します。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
.NET
HTTP
クエリ パラメータ
uploadType=multipartを指定して、メソッドの /upload URI にPOSTリクエストを作成します。POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipartリクエストの本文を作成します。本文は、 multipart/related コンテンツ タイプ RFC 2387 に従ってフォーマットします。これには次の 2 つの部分が含まれます。
- メタデータ。メタデータは最初に指定する必要があり、
Content-Typeヘッダーをapplication/json;charset=UTF-8に設定する必要があります。ファイルのメタデータを JSON 形式で追加します。 - メディア。メディアは 2 番目に指定する必要があり、
Content-Typeヘッダーは任意の MIME タイプにする必要があります。ファイルのデータをメディア要素に追加します。
最初の境界文字列の前に 2 個のハイフンを付けて、各部分を区別します。さらに、最後の境界文字列の後に 2 個のハイフンを追加します。
- メタデータ。メタデータは最初に指定する必要があり、
次の最上位の HTTP ヘッダーを追加します。
Content-Type:multipart/relatedに設定し、リクエストの各部分の識別に使用する境界文字列を含めます。例:Content-Type: multipart/related; boundary=foo_bar_bazContent-Length: リクエスト本文の総バイト数に設定します。
リクエストを送信します。
関連付けられたデータなしでメタデータ部分のみを作成または更新するには、標準リソース エンドポイント https://www.googleapis.com/drive/v3/files に POST リクエストまたは PATCH リクエストを送信します。リクエストが成功すると、サーバーは HTTP 200 OK ステータス コードとファイルのメタデータを返します。
ファイルを作成するときは、ファイルの name フィールドにファイル拡張子を指定する必要があります。たとえば、写真の JPEG ファイルを作成する場合は、メタデータに何か
のように "name": "photo.jpg"指定します。get メソッドを呼び出すと、name フィールドに指定された拡張子を含む読み取り専用の fileExtension
プロパティが返されます。
再開可能なアップロードを実行する
再開可能なアップロードを使用すると、通信障害でデータフローが中断した後にアップロード操作を再開できます。再開可能なアップロードでは、ネットワーク障害が発生した場合に大容量のファイルのアップロードを最初からやり直す必要がないため、使用する帯域幅を削減できます。
再開可能なアップロードは、ファイルサイズが大きく異なる場合や、リクエストに固定の時間制限がある場合(モバイル OS のバックグラウンド タスクや特定の App Engine リクエストなど)に便利です。アップロードの進行状況バーを表示する場合にも、再開可能なアップロードを使用できます。
再開可能なアップロードは、次のような手順で構成されます。
- 最初のリクエストを送信して、再開可能なセッション URI を取得します。
- データをアップロードし、アップロードの状態をモニタリングします。
- (省略可)アップロードが中断された場合は、アップロードを再開します。
最初のリクエストを送信する
再開可能なアップロードを開始するには、
create メソッドを files リソースで uploadType=resumable とともに使用します。
HTTP
クエリ パラメータ
uploadType=resumableを指定して、メソッドの /upload URI にPOSTリクエストを作成します。POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable開始リクエストが成功すると、レスポンスには
200 OKHTTP ステータス コードが含まれます。また、再開可能なセッション URI を指定したLocationヘッダーも含まれます。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 週間後に期限切れになります。
ファイルにメタデータがある場合には、リクエストの本文に 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ステータス コードが返されます。また、レスポンスには、再開可能なセッション URI を指定したLocationヘッダーが含まれます。 再開可能なセッション URI を使用してファイルデータをアップロードし、アップロード ステータスを確認します。再開可能なセッションの URI は 1 週間後に期限切れになります。再開可能なセッションの URL をコピーして保存します。
コンテンツのアップロードに進みます。
コンテンツをアップロードする
再開可能なセッションでファイルをアップロードするには、2 つの方法があります。
- 単一のリクエストでコンテンツをアップロードする: 1 つのリクエストでファイルをアップロードできる場合、単一のリクエストに固定の時間制限がない場合、アップロードの進行状況インジケーターを表示する必要がない場合は、この方法を使用します。この方法は、リクエストの数が少なく、パフォーマンスが向上するため、最適です。
複数のチャンクでコンテンツをアップロードする: 単一のリクエストで転送されるデータ量を減らす必要がある場合は、 この方法を使用します。個々のリクエストに固定の時間制限がある場合(App Engine リクエストの一部のクラスなど)は、転送されるデータを減らす必要がある場合があります。この方法は、アップロードの進行状況を示すカスタム インジケーターを提供する必要がある場合にも便利です。
HTTP - 単一のリクエスト
- 再開可能なセッションの URI に
PUTリクエストを作成します。 - ファイルのデータをリクエストの本文に追加します。
- Content-Length HTTP ヘッダーを追加し、ファイルのバイト数に設定します。
- リクエストを送信します。アップロード リクエストが中断するか、
5xxレスポンスを受信したら、中断されたアップロードを再開するの手順を行います。
HTTP - 複数のリクエスト
再開可能なセッションの URI に
PUTリクエストを作成します。リクエストの本文にチャンクのデータを追加します。サイズが 256 KB(256 x 1,024 バイト)の倍数になるようにチャンクを作成します(アップロードを完了する最後のチャックは除く)。アップロードを効率的に行うため、チャンクサイズはできるだけ大きくしてください。
次の HTTP ヘッダーを追加します。
Content-Length: 現在のチャンクのバイト数を設定します。Content-Range: アップロードするファイルのバイト数を示すように設定します。たとえば、Content-Range: bytes 0-524287/2000000は、2,000,000 バイトのファイルの最初の 524,288 バイト(256 x 1024 x 2)をアップロードすることを示します。
リクエストを送信してレスポンスを処理します。アップロード リクエストが 中断するか、
5xxレスポンスを受信したら、 中断されたアップロードを再開するの手順を行います。ファイルに残っているチャンクごとに、手順 1 ~ 4 を繰り返します。レスポンスの
Rangeヘッダーを使用して、次のチャンクを開始する位置を決定します。 サーバーが前のリクエストで送信されたすべてのバイトを受信したと想定しないでください。
ファイル全体のアップロードが完了すると、200 OK または 201 Created レスポンスと、リソースに関連付けられたメタデータを受け取ります。
中断されたアップロードを再開する
レスポンスを受信する前にアップロード リクエストが終了した場合や、503
Service Unavailable レスポンスが返された場合は、中断されたアップロードを再開する必要があります。
HTTP
アップロードのステータスを取得するため、再開可能なセッションの URI に空の
PUTリクエストを作成します。ファイル内の現在の位置が不明であることを示す
Content-Rangeヘッダーを追加します。たとえば、ファイルの合計サイズが 2,000,000 バイトの場合は、Content-Rangeを*/2000000に設定します。ファイル全体のサイズがわからない場合は、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 をリクエストして、アップロードを再開する必要があります。アップロード セッションは、1 週間操作が行われないと期限切れになります。
Google ドキュメントのタイプにインポートする
Drive でファイルを作成するときに、Google ドキュメントや Google スプレッドシートなどの Google Workspace ファイル形式に変換することがあります。たとえば、お気に入りのワープロ文書を Google ドキュメントに変換して、その機能を利用したい場合などです。
ファイルを特定の Google Workspace ファイル形式に変換するには、ファイルを作成するときに Google Workspace mimeType を指定します。
以下に、CSV ファイルを Google Workspace スプレッドシートに変換する方法を示します。
Java
Python
Node.js
PHP
.NET
変換が可能かどうかを確認するには、ファイルを作成する前に importFormats リソースの about フィールドを確認します。サポートされている変換は、この配列で動的に利用できます。一般的なインポート形式は次のとおりです。
| 差出人 | 宛先 |
|---|---|
| Microsoft Word、OpenDocument Text、HTML、RTF、プレーン テキスト | Google ドキュメント |
| Microsoft Excel、OpenDocument Spreadsheet、CSV、TSV、プレーン テキスト | Google スプレッドシート |
| Microsoft PowerPoint、OpenDocument Presentation | Google スライド |
| JPEG、PNG、GIF、BMP、PDF | Google ドキュメント(ドキュメントに画像を埋め込む) |
| プレーン テキスト(特別な MIME タイプ)、JSON | Google Apps Script |
ドキュメント、スプレッドシート、スライドのファイルに対する update リクエストでメディアをアップロードして変換すると、ドキュメントのコンテンツ全体が置き換えられます。
画像を Google ドキュメントに変換すると、Drive は光学式文字認識(OCR)を使用して画像をテキストに変換します。OCR アルゴリズムの品質を向上させるには、該当する BCP
47 言語コードを ocrLanguage パラメータに指定します。
抽出されたテキストは、埋め込まれた画像とともにドキュメントに表示されます。
事前生成された ID を使用してファイルをアップロードする
Drive API を使用すると、リソースの作成、コピー、アップロードに使用できる事前生成されたファイル ID のリストを取得できます。詳細については、 ファイルで使用する ID を生成するをご覧ください。
事前生成された ID を使用すると、サーバーエラーやタイムアウトが発生した場合でも、アップロードを安全に再試行できます。ファイル操作が成功した場合、後続の再試行では 409 Conflict HTTP ステータス コード レスポンスが返され、重複するファイルは作成されません。
事前生成された ID は、
Google Workspace ファイルの作成ではサポートされていません。ただし、application/vnd.google-apps.drive-sdk
と application/vnd.google-apps.folder MIME
タイプは例外です。同様に、Google Workspace ファイル形式への変換を参照するアップロードはサポートされていません。
不明なファイル形式のインデックス可能なテキストを定義する
ユーザーは Drive UI を使用してドキュメント コンテンツを検索できます。また、
list リソースの files メソッドと fullText フィールドを使用して、アプリから
コンテンツを検索することもできます。詳細については、ファイルと
フォルダを検索するをご覧ください。
Drive は、テキスト ドキュメント、PDF、テキストを含む画像など、ファイル形式を認識すると、検索用にドキュメントを自動的にインデックス登録します。アプリが他の種類のファイル(図面、
動画、ショートカットなど)を保存する場合は、ファイルの
contentHints.indexableText
フィールドにインデックス可能なテキストを指定することで、検出可能性を高めることができます。
インデックス可能なテキストの詳細については、ファイル メタデータを管理するをご覧ください。