フォルダは、メタデータのみを含むファイルで、Google ドライブ内のファイルを整理するために使用できます。次のプロパティがあります。
- フォルダは、MIME タイプ
application/vnd.google-apps.folder
のファイルで、拡張子はありません。 - エイリアス
root
を使用すると、ファイル ID が指定されている任意の場所でルートフォルダを参照できます。
ドライブのフォルダの上限の詳細については、ファイルとフォルダの上限をご覧ください。
このガイドでは、フォルダに関連する基本的なタスクの実行方法について説明します。
フォルダを作成
フォルダを作成するには、application/vnd.google-apps.folder
MIME タイプとタイトルを指定して files.create
メソッドを使用します。次のコードサンプルは、クライアント ライブラリを使用してフォルダを作成する方法を示しています。
Java
import com.google.api.client.googleapis.json.GoogleJsonResponseException; 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's create folder API */ public class CreateFolder { /** * Create new folder. * * @return Inserted folder id if successful, {@code null} otherwise. * @throws IOException if service account credentials file not found. */ public static String createFolder() 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("Test"); fileMetadata.setMimeType("application/vnd.google-apps.folder"); try { File file = service.files().create(fileMetadata) .setFields("id") .execute(); System.out.println("Folder ID: " + file.getId()); return file.getId(); } catch (GoogleJsonResponseException e) { // TODO(developer) - handle error appropriately System.err.println("Unable to create folder: " + e.getDetails()); throw e; } } }
Python
import google.auth from googleapiclient.discovery import build from googleapiclient.errors import HttpError def create_folder(): """Create a folder and prints the folder ID Returns : Folder Id 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": "Invoices", "mimeType": "application/vnd.google-apps.folder", } # pylint: disable=maybe-no-member file = service.files().create(body=file_metadata, fields="id").execute() print(f'Folder ID: "{file.get("id")}".') return file.get("id") except HttpError as error: print(f"An error occurred: {error}") return None if __name__ == "__main__": create_folder()
Node.js
/** * Create a folder and prints the folder ID * @return{obj} folder Id * */ async function createFolder() { // Get credentials and build service // TODO (developer) - Use appropriate auth mechanism for your app const {GoogleAuth} = require('google-auth-library'); const {google} = require('googleapis'); const auth = new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/drive', }); const service = google.drive({version: 'v3', auth}); const fileMetadata = { name: 'Invoices', mimeType: 'application/vnd.google-apps.folder', }; try { const file = await service.files.create({ requestBody: fileMetadata, fields: 'id', }); console.log('Folder Id:', file.data.id); return file.data.id; } catch (err) { // TODO(developer) - Handle error throw err; } }
PHP
use Google\Client; use Google\Service\Drive; function createFolder() { try { $client = new Client(); $client->useApplicationDefaultCredentials(); $client->addScope(Drive::DRIVE); $driveService = new Drive($client); $fileMetadata = new Drive\DriveFile(array( 'name' => 'Invoices', 'mimeType' => 'application/vnd.google-apps.folder')); $file = $driveService->files->create($fileMetadata, array( 'fields' => 'id')); printf("Folder ID: %s\n", $file->id); return $file->id; }catch(Exception $e) { echo "Error Message: ".$e; } }
.NET
using Google.Apis.Auth.OAuth2; using Google.Apis.Drive.v3; using Google.Apis.Services; namespace DriveV3Snippets { // Class to demonstrate use of Drive create folder API. public class CreateFolder { /// <summary> /// Creates a new folder. /// </summary> /// <returns>created folder id, null otherwise</returns> public static string DriveCreateFolder() { 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" }); // File metadata var fileMetadata = new Google.Apis.Drive.v3.Data.File() { Name = "Invoices", MimeType = "application/vnd.google-apps.folder" }; // Create a new folder on drive. var request = service.Files.Create(fileMetadata); request.Fields = "id"; var file = request.Execute(); // Prints the created folder id. Console.WriteLine("Folder ID: " + file.Id); return file.Id; } catch (Exception e) { // TODO(developer) - handle error appropriately if (e is AggregateException) { Console.WriteLine("Credential Not found"); } else { throw; } } return null; } } }
特定のフォルダにファイルを作成する
特定のフォルダにファイルを作成するには、files.create
メソッドを使用して、ファイルの parents
プロパティにフォルダ ID を指定します。
parents
プロパティには、ファイルを含む親フォルダの ID が保持されます。parents
プロパティは、最上位フォルダまたは他のフォルダにファイルを作成する場合に使用できます。
ファイルに設定できる親フォルダは 1 つのみです。複数の親フォルダを指定することはできません。
次のコードサンプルは、クライアント ライブラリを使用して特定のフォルダにファイルを作成する方法を示しています。
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; import java.util.Collections; /* Class to demonstrate Drive's upload to folder use-case. */ public class UploadToFolder { /** * Upload a file to the specified folder. * * @param realFolderId Id of the folder. * @return Inserted file metadata if successful, {@code null} otherwise. * @throws IOException if service account credentials file not found. */ public static File uploadToFolder(String realFolderId) 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("photo.jpg"); fileMetadata.setParents(Collections.singletonList(realFolderId)); java.io.File filePath = new java.io.File("files/photo.jpg"); FileContent mediaContent = new FileContent("image/jpeg", filePath); try { File file = service.files().create(fileMetadata, mediaContent) .setFields("id, parents") .execute(); System.out.println("File ID: " + file.getId()); return file; } catch (GoogleJsonResponseException e) { // TODO(developer) - handle error appropriately System.err.println("Unable to upload file: " + e.getDetails()); throw e; } } }
Python
import google.auth from googleapiclient.discovery import build from googleapiclient.errors import HttpError from googleapiclient.http import MediaFileUpload def upload_to_folder(folder_id): """Upload a file to the specified folder and prints file ID, folder ID Args: Id of the folder 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": "photo.jpg", "parents": [folder_id]} media = MediaFileUpload( "download.jpeg", mimetype="image/jpeg", resumable=True ) # 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")}".') return file.get("id") except HttpError as error: print(f"An error occurred: {error}") return None if __name__ == "__main__": upload_to_folder(folder_id="1s0oKEZZXjImNngxHGnY0xed6Mw-tvspu")
Node.js
/** * Upload a file to the specified folder * @param{string} folderId folder ID * @return{obj} file Id * */ async function uploadToFolder(folderId) { 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}); // TODO(developer): set folder Id // folderId = '1lWo8HghUBd-3mN4s98ArNFMdqmhqCXH7'; const fileMetadata = { name: 'photo.jpg', parents: [folderId], }; const media = { mimeType: 'image/jpeg', body: fs.createReadStream('files/photo.jpg'), }; 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
use Google\Client; use Google\Service\Drive; function uploadToFolder($folderId) { try { $client = new Client(); $client->useApplicationDefaultCredentials(); $client->addScope(Drive::DRIVE); $driveService = new Drive($client); $fileMetadata = new Drive\DriveFile(array( 'name' => 'photo.jpg', 'parents' => array($folderId) )); $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; } } require_once 'vendor/autoload.php'; uploadToFolder();
.NET
using Google.Apis.Auth.OAuth2; using Google.Apis.Drive.v3; using Google.Apis.Services; namespace DriveV3Snippets { // Class to demonstrate use of Drive upload to folder. public class UploadToFolder { /// <summary> /// Upload a file to the specified folder. /// </summary> /// <param name="filePath">Image path to upload.</param> /// <param name="folderId">Id of the folder.</param> /// <returns>Inserted file metadata if successful, null otherwise</returns> public static Google.Apis.Drive.v3.Data.File DriveUploadToFolder (string filePath, string folderId) { 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 in specified folder on drive. var fileMetadata = new Google.Apis.Drive.v3.Data.File() { Name = "photo.jpg", Parents = new List<string> { folderId } }; 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; } 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 if (e is DirectoryNotFoundException) { Console.WriteLine("Directory Not found"); } else { throw; } } return null; } } }
フォルダ間でファイルを移動する
ファイルを移動するには、parents
プロパティの ID を更新する必要があります。
既存のファイルの親を追加または削除するには、addParents
クエリ パラメータと removeParents
クエリ パラメータを指定して files.update
メソッドを使用します。
ファイルに設定できる親フォルダは 1 つのみです。複数の親フォルダを指定することはできません。
次のコードサンプルは、クライアント ライブラリを使用してフォルダ間でファイルを移動する方法を示しています。
Java
import com.google.api.client.googleapis.json.GoogleJsonResponseException; 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; import java.util.List; /* Class to demonstrate use case for moving file to folder.*/ public class MoveFileToFolder { /** * @param fileId Id of file to be moved. * @param folderId Id of folder where the fill will be moved. * @return list of parent ids for the file. */ public static List<String> moveFileToFolder(String fileId, String folderId) 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(); // Retrieve the existing parents to remove File file = service.files().get(fileId) .setFields("parents") .execute(); StringBuilder previousParents = new StringBuilder(); for (String parent : file.getParents()) { previousParents.append(parent); previousParents.append(','); } try { // Move the file to the new folder file = service.files().update(fileId, null) .setAddParents(folderId) .setRemoveParents(previousParents.toString()) .setFields("id, parents") .execute(); return file.getParents(); } catch (GoogleJsonResponseException e) { // TODO(developer) - handle error appropriately System.err.println("Unable to move file: " + e.getDetails()); throw e; } } }
Python
import google.auth from googleapiclient.discovery import build from googleapiclient.errors import HttpError def move_file_to_folder(file_id, folder_id): """Move specified file to the specified folder. Args: file_id: Id of the file to move. folder_id: Id of the folder Print: An object containing the new parent folder and other meta data Returns : Parent Ids for the file 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: # call drive api client service = build("drive", "v3", credentials=creds) # pylint: disable=maybe-no-member # Retrieve the existing parents to remove file = service.files().get(fileId=file_id, fields="parents").execute() previous_parents = ",".join(file.get("parents")) # Move the file to the new folder file = ( service.files() .update( fileId=file_id, addParents=folder_id, removeParents=previous_parents, fields="id, parents", ) .execute() ) return file.get("parents") except HttpError as error: print(f"An error occurred: {error}") return None if __name__ == "__main__": move_file_to_folder( file_id="1KuPmvGq8yoYgbfW74OENMCB5H0n_2Jm9", folder_id="1jvTFoyBhUspwDncOTB25kb9k0Fl0EqeN", )
Node.js
/** * Change the file's modification timestamp. * @param{string} fileId Id of the file to move * @param{string} folderId Id of the folder to move * @return{obj} file status * */ async function moveFileToFolder(fileId, folderId) { 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}); try { // Retrieve the existing parents to remove const file = await service.files.get({ fileId: fileId, fields: 'parents', }); // Move the file to the new folder const previousParents = file.data.parents .join(','); const files = await service.files.update({ fileId: fileId, addParents: folderId, removeParents: previousParents, fields: 'id, parents', }); console.log(files.status); return files.status; } catch (err) { // TODO(developer) - Handle error throw err; } }
PHP
use Google\Client; use Google\Service\Drive; use Google\Service\Drive\DriveFile; function moveFileToFolder($fileId,$folderId) { try { $client = new Client(); $client->useApplicationDefaultCredentials(); $client->addScope(Drive::DRIVE); $driveService = new Drive($client); $emptyFileMetadata = new DriveFile(); // Retrieve the existing parents to remove $file = $driveService->files->get($fileId, array('fields' => 'parents')); $previousParents = join(',', $file->parents); // Move the file to the new folder $file = $driveService->files->update($fileId, $emptyFileMetadata, array( 'addParents' => $folderId, 'removeParents' => $previousParents, 'fields' => 'id, parents')); return $file->parents; } catch(Exception $e) { echo "Error Message: ".$e; } }
.NET
using Google; using Google.Apis.Auth.OAuth2; using Google.Apis.Drive.v3; using Google.Apis.Services; namespace DriveV3Snippets { // Class to demonstrate use-case of Drive move file to folder. public class MoveFileToFolder { /// <summary> /// Move specified file to the specified folder. /// </summary> /// <param name="fileId">Id of file to be moved.</param> /// <param name="folderId">Id of folder where the fill will be moved.</param> /// <returns>list of parent ids for the file, null otherwise.</returns> public static IList<string> DriveMoveFileToFolder(string fileId, string folderId) { 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" }); // Retrieve the existing parents to remove var getRequest = service.Files.Get(fileId); getRequest.Fields = "parents"; var file = getRequest.Execute(); var previousParents = String.Join(",", file.Parents); // Move the file to the new folder var updateRequest = service.Files.Update(new Google.Apis.Drive.v3.Data.File(), fileId); updateRequest.Fields = "id, parents"; updateRequest.AddParents = folderId; updateRequest.RemoveParents = previousParents; file = updateRequest.Execute(); return file.Parents; } catch (Exception e) { // TODO(developer) - handle error appropriately if (e is AggregateException) { Console.WriteLine("Credential Not found"); } else if (e is GoogleApiException) { Console.WriteLine("File or Folder not found"); } else { throw; } } return null; } } }
ファイルとフォルダの制限
ドライブのファイルとフォルダにはストレージの上限があります。
ユーザー アイテムの上限
各ユーザーは、そのアカウントで作成したアイテムを最大 5 億個保持することができます。上限に達すると、ユーザーはドライブでのアイテムの作成やアップロードができなくなります。ただし、既存のアイテムの閲覧や編集は引き続き行えます。ファイルを再び作成するには、アイテムを完全に削除するか、別のアカウントを使用する必要があります。詳細については、ファイルとフォルダをゴミ箱に移動または削除するをご覧ください。
この上限にカウントされるオブジェクトは次のとおりです。
- ユーザーがドライブで作成またはアップロードしたアイテム
- ユーザーが作成したが、現在は別のユーザーが所有しているアイテム
- ゴミ箱内のアイテム
- ショートカット
- サードパーティのショートカット
この上限にカウントされないオブジェクトは次のとおりです。
- 完全に削除されたアイテム
- ユーザーと共有されているが、他のユーザーが所有するアイテム
- ユーザーが所有するが、別のユーザーが作成したアイテム
5 億を超えるアイテムを追加しようとすると、activeItemCreationLimitExceeded
HTTP ステータス コード レスポンスが返されます。
サービス アカウントが所有できるアイテムの数に上限はありませんが、サービス アカウントが作成できるアイテムの数には 5 億個の上限が適用されます。
フォルダアイテムの上限
ユーザーのマイドライブ内の各フォルダに保存できるアイテム数は 500,000 個までです。この上限はマイドライブのルートフォルダには適用されません。この上限にカウントされるアイテムは次のとおりです。
- フォルダ
- ファイルファイルの所有権に関係なく、すべてのファイル形式。
- ショートカット。参照先のアイテムがそのフォルダ内にない場合でも、フォルダ内の 1 つのアイテムとしてカウントされます。詳細については、ドライブ ファイルへのショートカットを作成するをご覧ください。
- サードパーティ製ショートカット。参照先のアイテムがそのフォルダ内にない場合でも、フォルダ内の 1 つのアイテムとしてカウントされます。詳細については、アプリによって保存されたコンテンツへのショートカット ファイルを作成するをご覧ください。
フォルダの制限について詳しくは、Google ドライブ内のフォルダに関する制限事項をご覧ください。
フォルダの階層の深さの制限
ユーザーのマイドライブに含められるフォルダ階層は最大 100 レベルです。つまり、子フォルダを 99 階層を超えるフォルダの下に保存することはできません。この制限は子フォルダにのみ適用されます。application/vnd.google-apps.folder
以外の MIME タイプの子ファイルは、この制限の対象外です。
たとえば、次の図では、新しいフォルダをフォルダ番号 99 内にネストできますが、フォルダ番号 100 内にはネストできません。ただし、フォルダ番号 100 には、他のドライブ フォルダと同様にファイルを保存できます。
100 を超えるレベルのフォルダを追加しようとすると、myDriveHierarchyDepthLimitExceeded
HTTP ステータス コード レスポンスが返されます。