폴더는 메타데이터만 포함하고 파일을 정리하는 데 사용할 수 있는 파일입니다. 있습니다. 다음과 같은 속성이 있습니다.
- 폴더는 MIME 유형을 가진 파일입니다.
application/vnd.google-apps.folder
이고 확장자가 없습니다. - 별칭
root
를 사용하면 파일 ID가 있는 모든 위치에서 루트 폴더를 참조할 수 있습니다. 제공됩니다
드라이브 폴더 한도에 대한 자세한 내용은 파일 및 폴더 한도를 입력합니다.
이 가이드에서는 몇 가지 기본적인 폴더 관련 작업을 수행하는 방법을 설명합니다.
폴더 만들기
폴더를 만들려면 files.create
를 사용하세요.
application/vnd.google-apps.folder
MIME를 사용한 메서드
유형과 제목을 포함합니다. 다음 코드 샘플은
클라이언트 라이브러리를 사용하여 폴더를 만드는 방법:
자바
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
속성입니다.
parents
속성에는 파일이 포함된 상위 폴더의 ID가 포함됩니다.
parents
속성은 최상위 폴더에 파일을 만들 때 또는
다른 모든 폴더에 저장할 수 있습니다.
파일에는 상위 폴더가 하나만 있을 수 있습니다. 여러 상위 항목을 지정하는 것은 지원됩니다.
다음 코드 샘플은 다음을 사용하여 특정 폴더에 파일을 만드는 방법을 보여줍니다. 클라이언트 라이브러리를 사용해 만들 수 있습니다.
자바
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를 업데이트해야 합니다.
기존 파일의 상위 항목을 추가하거나 삭제하려면 files.update
메서드를 addParents
및
removeParents
쿼리 매개변수
파일에는 상위 폴더가 하나만 있을 수 있습니다. 여러 상위 항목을 지정하는 것은 지원됩니다.
다음 코드 샘플은 클라이언트 라이브러리:
자바
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; } } }
파일 및 폴더 한도
Drive 파일 및 폴더에는 저장용량 한도가 있습니다.
사용자 항목 한도
각 사용자는 해당 계정에서 만든 항목을 최대 5억 개까지 보유할 수 있습니다. 한도에 도달하면 사용자는 더 이상 드라이브. 기존 항목을 보고 수정할 수는 있습니다. 만들기 파일을 다시 사용하려면 사용자는 항목을 완전히 삭제하거나 다른 계정을 사용해야 합니다. 대상 자세한 내용은 파일 휴지통 또는 삭제 및 폴더를 참조하세요.
이 한도에 포함되는 객체는 다음과 같습니다.
- 사용자가 Drive에서 만들거나 업로드한 항목
- 사용자가 만들었지만 다른 사용자가 소유한 항목
- 휴지통에 있는 항목
- 단축키
- 서드 파티 단축키
이 한도에 포함되지 않는 객체는 다음과 같습니다.
- 영구적으로 삭제된 항목
- 사용자와 공유되었지만 다른 사용자가 소유한 항목
- 사용자가 소유하고 있지만 다른 사용자가 만든 항목
5억 개가 넘는 항목을 추가하려고 하면
activeItemCreationLimitExceeded
드림
HTTP 상태 코드 응답입니다.
서비스 계정이 사용할 수 있는 항목 수에는 제한이 없습니다. 5억 개의 항목 한도가 서비스 계정에 만들 수 있습니다.
폴더 항목 한도
사용자의 내 드라이브에 있는 각 폴더에 포함할 수 있는 항목은 500,000개로 제한됩니다. 이 한도는 내 드라이브의 루트 폴더에는 적용되지 않습니다. 항목 한도에 포함되는 항목은 다음과 같습니다.
- 폴더
- 파일 파일 소유권과 관계없이 모든 파일 형식
- 지름길. 항목이 포함된 경우에도 폴더 내 단일 항목으로 계산됩니다. 해당 폴더 내에 있지 않아야 합니다. 자세한 내용은 문서 만들기 드라이브 파일 바로가기
- 서드 파티 단축키 다음과 같은 경우에도 폴더 내에서 단일 항목으로 계산됩니다. 항목이 해당 폴더 내에 있지 않아야 합니다. 자세한 내용은 Google 서비스에서 저장한 콘텐츠의 바로가기 파일을 앱을 엽니다.
폴더 제한에 대한 자세한 내용은 폴더 제한의 Google Drive를 사용합니다.
폴더 깊이 제한
사용자의 내 드라이브에 중첩되는 레벨은 100개를 초과할 수 없습니다.
폴더를 만들 수 있습니다 즉, 하위 폴더를
99개 이상의 레벨이 있습니다. 이 제한은 하위 폴더에만 적용됩니다. 자녀
다음 MIME 유형이 있는 파일입니다.
application/vnd.google-apps.folder
은(는) 이 제한에서 제외됩니다.
예를 들어 다음 다이어그램에서는 새 폴더가 폴더 내에 중첩될 수 있습니다. 번호가 99이지만 폴더 번호 100 안에는 포함되지 않습니다. 그러나 폴더 번호 100에는 다른 Drive 폴더와 같은 파일 내 파일을 저장할 수 있습니다.
100개가 넘는 폴더 수준을 추가하려고 하면
myDriveHierarchyDepthLimitExceeded
드림
HTTP 상태 코드 응답입니다.