Google Drive API は、次の表に示すように、複数の種類のダウンロードとエクスポートのアクションをサポートしています。
| ダウンロード アクション |
|
||||
| エクスポート アクション |
|
Drive API では、blob ファイルは Google Workspace ドキュメントではなく、Google ドライブに保存されている任意の未加工のバイナリ ファイル(画像、動画、PDF など)を指します。JavaScript の Blob オブジェクトを指すものではありません。ここで説明したファイル形式(BLOB や Google Workspace ファイルなど)の詳細については、ファイル形式をご覧ください。
ファイル コンテンツをダウンロードまたはエクスポートする前に、files リソースの capabilities.canDownload フィールドを使用してユーザーがファイルをダウンロードできることを確認します。
このドキュメントでは、上記のダウンロードとエクスポートを行う手順について詳しく説明します。
BLOB ファイルのコンテンツをダウンロードする
ドライブに保存されている BLOB ファイルをダウンロードするには、ダウンロードするファイルの ID と alt system パラメータを指定して files.get メソッドを使用します。alt=media パラメータは、代替レスポンス形式としてコンテンツのダウンロードがリクエストされていることをサーバーに伝えます。
alt システム パラメータは、すべての Google REST API で使用できます。Drive API クライアント ライブラリを使用する場合、このパラメータを明示的に設定する必要はありません。クライアント ライブラリ メソッドが基盤となる HTTP リクエストに alt=media パラメータを追加するためです。
次のコードサンプルは、files.get メソッドを使用してファイルをダウンロードする方法を示しています。
Apps Script
/**
* Downloads a file from Drive.
* @param {string} fileId The ID of the file to download.
* @return {Blob} The file content as a Blob.
*/
function downloadFile(fileId) {
var url = 'https://www.googleapis.com/drive/v3/files/' + fileId + '?alt=media';
var response = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
}
});
return response.getBlob();
}
Java
Python
Node.js
PHP
.NET
curl
curl -L "https://www.googleapis.com/drive/v3/files/FILE_ID?alt=media" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--output "FILE_NAME"
次のように置き換えます。
- FILE_ID: ダウンロードするファイルの ID。
- ACCESS_TOKEN: API へのアクセスを許可するアクセス トークン。
- FILE_NAME: 出力ファイルの名前。
アプリから開始されたファイルのダウンロードは、ファイル コンテンツへの読み取りアクセスを許可するスコープで承認される必要があります。たとえば、drive.readonly.metadata スコープを使用するアプリは、ファイルの内容をダウンロードする権限がありません。クライアント ライブラリのコードサンプルでは、ユーザーがすべてのドライブ ファイルを表示および管理できるようにする、制限付きの drive ファイル スコープを使用しています。ドライブのスコープについて詳しくは、Google Drive API のスコープを選択するをご覧ください。
owner 権限(マイドライブ ファイルの場合)または organizer 権限(共有ドライブ ファイルの場合)を持つユーザーは、DownloadRestrictionsMetadata オブジェクトを使用してダウンロードを制限できます。詳しくは、ユーザーによるファイルのダウンロード、印刷、コピーを禁止するをご覧ください。
不正使用(有害なソフトウェアなど)と判断されたファイルは、ファイルのオーナーのみがダウンロードできます。また、acknowledgeAbuse クエリ パラメータを true に設定して、ユーザーが望ましくないソフトウェアやその他の不正なファイルをダウンロードするリスクを認識していることを示す必要があります。アプリは、このクエリ パラメータを使用する前に、ユーザーに警告をインタラクティブに表示する必要があります。
メモリ内のファイルデータにアクセスする
アプリケーションでファイルデータをローカル ディスクに保存するのではなく、メモリ内で直接(バイトバッファなどとして)アクセスする必要がある場合は、クライアント ライブラリ リクエストを調整するか、返されたストリームを処理できます。
Node.js: デフォルトでは、Node.js クライアント ライブラリはファイル コンテンツを
Readableストリームとして返します。ファイルをローカル ディスクに保存するには:const fs = require('fs'); const dest = fs.createWriteStream('/path/to/dest/file.ext'); const response = await service.files.get( { fileId, alt: 'media' }, { responseType: 'stream' } ); response.data .on('end', () => { console.log('Download complete.'); }) .on('error', (err) => { console.error('Error downloading file.', err); }) .pipe(dest);または、データをストリームではなく
ArrayBufferとしてメモリに直接返すには、リクエスト オプションでresponseTypeパラメータを設定します。const file = await service.files.get({ fileId, alt: 'media', }, { responseType: 'arraybuffer' }); // Convert the ArrayBuffer to a Node.js Buffer object. const buffer = Buffer.from(file.data);Python: BLOB ファイルをダウンロードする Python コードサンプルでは、ダウンロード チャンクがインメモリの
io.BytesIO()オブジェクトに書き込まれます。未加工のバイトにアクセスするには、file.getvalue()を呼び出します。Java: blob ファイルをダウンロードする Java コードサンプルでは、
java.io.ByteArrayOutputStreamを使用して、ダウンロードしたバイトをメモリにキャプチャします。outputStream.toByteArray()を使用して未加工のバイト配列にアクセスします。.NET: blob ファイルをダウンロードする C# コードサンプルでは、
System.IO.MemoryStreamを使用します。stream.ToArray()を使用して、基盤となるバイト配列にアクセスします。Apps Script: BLOB ファイルをダウンロードする Apps Script コードサンプルでは、
response.getBlob()メソッドを使用してBlobオブジェクトを返します。getBytes()メソッドを使用して、これをバイト配列に変換します。
部分的なダウンロード
部分的ダウンロードでは、ファイルの指定された部分のみをダウンロードします。ダウンロードするファイルの部分を指定するには、Range ヘッダーでバイト範囲を使用します。次に例を示します。
Range: bytes=500-999
以前のバージョンの BLOB ファイル コンテンツをダウンロードする
以前のバージョンの BLOB ファイルのコンテンツをダウンロードするには、ダウンロードするファイルの ID、リビジョンの ID、alt システム パラメータを指定して revisions.get メソッドを使用します。alt=media パラメータは、代替レスポンス形式としてコンテンツのダウンロードがリクエストされていることをサーバーに伝えます。files.get と同様に、revisions.get メソッドも acknowledgeAbuse クエリ パラメータと Range ヘッダーを受け取ります。
「この履歴を削除しない」とマークされた blob ファイル コンテンツの改訂版のみをダウンロードできます。リビジョンをダウンロードする場合は、まず [この履歴を削除しない] に設定します。詳細については、自動削除から保存するリビジョンを指定するをご覧ください。
リビジョンのダウンロードの詳細については、長時間実行オペレーションを管理するをご覧ください。
curl
curl -L "https://www.googleapis.com/drive/v3/files/FILE_ID/revisions/REVISION_ID?alt=media" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--output "FILE_NAME"
次のように置き換えます。
- FILE_ID: ダウンロードするファイルの ID。
- REVISION_ID: ダウンロードするリビジョンの ID。
- ACCESS_TOKEN: API へのアクセスを許可するアクセス トークン。
- FILE_NAME: 出力ファイルの名前。
ブラウザで BLOB ファイルのコンテンツをダウンロードする
API ではなくブラウザ内で Drive に保存されている blob ファイルのコンテンツをダウンロードするには、files リソースの webContentLink フィールドを使用します。ユーザーがファイルへのダウンロード アクセス権を持っている場合は、ファイルとそのコンテンツをダウンロードするためのリンクが返されます。この URL にユーザーをリダイレクトするか、クリック可能なリンクを提示します。
curl
curl "https://www.googleapis.com/drive/v3/files/FILE_ID?fields=webContentLink" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--header "Accept: application/json"
次のように置き換えます。
- FILE_ID: ダウンロード リンクを取得するファイルの ID。
- ACCESS_TOKEN: API へのアクセスを許可するアクセス トークン。
長時間実行オペレーションを使用して BLOB ファイルのコンテンツをダウンロードする
長時間実行オペレーション(LRO)を使用して BLOB ファイルのコンテンツをダウンロードするには、ダウンロードするファイルの ID を指定して files.download メソッドを使用します。必要に応じて、リビジョンの ID を設定できます。
Google Vids ファイルをダウンロードするには、この方法しかありません。Google Vids ファイルをエクスポートしようとすると、fileNotExportable エラーが表示されます。詳細については、長時間実行オペレーションの管理をご覧ください。
curl
次の curl コマンドは LRO を開始し、JSON レスポンスを返します。ファイルをダウンロードするか、この LRO をポーリングするには、返された ID を使用して別のリクエストを行い、コンテンツ URL を取得する必要があります。次に、その URL に最終的な curl リクエストを送信して、ファイルをダウンロードします。詳細については、長時間実行オペレーションの管理をご覧ください。
curl --request POST "https://www.googleapis.com/drive/v3/files/FILE_ID/download?mimeType=video/mp4" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--header "Content-Length: 0" \
--header "Accept: application/json"
次のように置き換えます。
- FILE_ID: ダウンロードするファイルの ID。
- ACCESS_TOKEN: API へのアクセスを許可するアクセス トークン。
Google Workspace ドキュメントのコンテンツをエクスポートする
Google Workspace ドキュメントのバイト コンテンツをエクスポートするには、エクスポートするファイルの ID と正しい MIME タイプを指定して files.export メソッドを使用します。エクスポートされるコンテンツは 10 MB に制限されます。
次のコードサンプルは、files.export メソッドを使用して Google Workspace ドキュメントを PDF 形式でエクスポートする方法を示しています。
Apps Script
/**
* Exports a Google Workspace document.
* @param {string} fileId The ID of the file to export.
* @param {string} mimeType The MIME type to export to.
* @return {Blob} The exported content as a Blob.
*/
function exportPdf(fileId, mimeType) {
var url = 'https://www.googleapis.com/drive/v3/files/' + fileId + '/export?mimeType=' + encodeURIComponent(mimeType);
var response = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
}
});
return response.getBlob();
}
Java
Python
Node.js
PHP
.NET
curl
curl -L "https://www.googleapis.com/drive/v3/files/FILE_ID/export?mimeType=application/pdf" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--output "FILE_NAME.pdf"
次のように置き換えます。
- FILE_ID: ダウンロードするファイルの ID。
- ACCESS_TOKEN: API へのアクセスを許可するアクセス トークン。
- FILE_NAME: 出力ファイルの名前。
クライアント ライブラリのコードサンプルでは、ユーザーがすべてのドライブ ファイルを表示および管理できる制限付きの drive スコープを使用します。ドライブのスコープについて詳しくは、Google Drive API のスコープを選択するをご覧ください。
コードサンプルでは、エクスポート MIME タイプも application/pdf として宣言しています。各 Google Workspace ドキュメントでサポートされているすべてのエクスポート MIME タイプの完全なリストについては、Google Workspace ドキュメントのエクスポート MIME タイプをご覧ください。
ブラウザで Google Workspace ドキュメントのコンテンツをエクスポートする
ブラウザ内で Google Workspace ドキュメントのコンテンツをエクスポートするには、files リソースの exportLinks フィールドを使用します。ドキュメント タイプに応じて、利用可能なすべての MIME タイプについて、ファイルとそのコンテンツをダウンロードするためのリンクが返されます。この URL にユーザーをリダイレクトするか、クリック可能なリンクを提示します。
curl
curl "https://www.googleapis.com/drive/v3/files/FILE_ID?fields=id,name,exportLinks" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--header "Accept: application/json"
次のように置き換えます。
- FILE_ID: ダウンロード リンクを取得するファイルの ID。
- ACCESS_TOKEN: API へのアクセスを許可するアクセス トークン。
ブラウザで以前のバージョンの Google Workspace ドキュメントのコンテンツをエクスポートする
ブラウザで以前のバージョンの Google Workspace ドキュメントのコンテンツをエクスポートするには、ダウンロードするファイルの ID とリビジョンの ID を指定して revisions.get メソッドを使用し、エクスポート リンクを生成します。このリンクからダウンロードを実行できます。ユーザーがファイルへのダウンロード アクセス権を持っている場合は、ファイルとそのコンテンツをダウンロードするためのリンクが返されます。この URL にユーザーをリダイレクトするか、クリック可能なリンクを提示します。
curl
curl "https://www.googleapis.com/drive/v3/files/FILE_ID/revisions/REVISION_ID?fields=id,name,exportLinks" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--header "Accept: application/json"
次のように置き換えます。
- FILE_ID: ダウンロードするファイルの ID。
- REVISION_ID: ダウンロードするリビジョンの ID。
- ACCESS_TOKEN: API へのアクセスを許可するアクセス トークン。
長時間実行オペレーションを使用して Google Workspace ドキュメントのコンテンツをエクスポートする
長時間実行オペレーション(LRO)を使用して Google Workspace ドキュメントのコンテンツをエクスポートするには、ダウンロードするファイルの ID とリビジョンの ID を指定して files.download メソッドを使用します。詳細については、長時間実行オペレーションの管理をご覧ください。
curl
次の curl コマンドは LRO を開始し、JSON レスポンスを返します。ファイルをダウンロードするか、この LRO をポーリングするには、返された ID を使用して別のリクエストを行い、コンテンツ URL を取得する必要があります。次に、その URL に最終的な curl リクエストを送信して、ファイルをダウンロードします。詳細については、長時間実行オペレーションの管理をご覧ください。
curl --request POST "https://www.googleapis.com/drive/v3/files/FILE_ID/download?mimeType=MIME_TYPE&revisionId=REVISION_ID" \
--header "Authorization: Bearer ACCESS_TOKEN" \
--header "Content-Length: 0" \
--header "Accept: application/json"
次のように置き換えます。
- FILE_ID: ダウンロードするファイルの ID。
- MIME_TYPE: エクスポート先の MIME タイプ。
- REVISION_ID: ダウンロードするリビジョンの ID。
- ACCESS_TOKEN: API へのアクセスを許可するアクセス トークン。