アプリケーション データフォルダは、構成ファイルで、構成ファイルなどのアプリケーション固有のデータを保存するために使用できる特別な隠しフォルダです。アプリデータ フォルダ内にファイルを作成しようとすると、アプリデータ フォルダが自動的に作成されます。このフォルダを使用して、ユーザーが直接操作しないファイルを保存します。このフォルダにアクセスできるのはアプリケーションだけです。そのコンテンツは、ユーザーや他のドライブアプリで非表示になります。
appDataFolder
内のファイルは、保存場所(スペース)を移動できません。詳細については、ファイル編成をご覧ください。
ユーザーがマイドライブからアプリをアンインストールすると、アプリデータ フォルダは削除されます。ユーザーは、アプリのデータフォルダを手動で削除することもできます。
アプリケーション データフォルダのスコープ
アプリケーション データフォルダにアクセスするには、まず https://www.googleapis.com/auth/drive.appdata
スコープへのアクセスをリクエストする必要があります。スコープとアクセスをリクエストする方法について詳しくは、API 固有の承認と認証情報をご覧ください。特定の OAuth 2.0 スコープの詳細については、Google API の OAuth 2.0 スコープをご覧ください。
アプリデータ フォルダにファイルを作成する
アプリデータ フォルダにファイルを作成するには、ファイルの parents
プロパティに appDataFolder
を指定し、files.create
メソッドを使用してフォルダにファイルをアップロードします。次のコードサンプルは、クライアント ライブラリを使用してフォルダにファイルを挿入する方法を示しています。
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 use-case of create file in the application data folder. */ public class UploadAppData { /** * Creates a file in the application data folder. * * @return Created file's Id. */ public static String uploadAppData() 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 = null; try { credentials = GoogleCredentials.getApplicationDefault() .createScoped(Arrays.asList(DriveScopes.DRIVE_APPDATA)); } catch (IOException e) { e.printStackTrace(); } 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(); try { // File's metadata. File fileMetadata = new File(); fileMetadata.setName("config.json"); fileMetadata.setParents(Collections.singletonList("appDataFolder")); java.io.File filePath = new java.io.File("files/config.json"); FileContent mediaContent = new FileContent("application/json", filePath); 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 create file: " + e.getDetails()); throw e; } } }
Python
from __future__ import print_function import google.auth from googleapiclient.discovery import build from googleapiclient.errors import HttpError from googleapiclient.http import MediaFileUpload def upload_appdata(): """Insert a file in the application data folder and prints file Id. Returns : ID's of the inserted files 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 file_metadata = { 'name': 'abc.txt', 'parents': ['appDataFolder'] } media = MediaFileUpload('abc.txt', mimetype='text/txt', resumable=True) 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_appdata()
Node.js
/** * Insert a file in the application data folder and prints file Id * */ async function uploadAppdata() { // 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 fs = require('fs'); const auth = new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/drive.appdata', }); const service = google.drive({version: 'v3', auth}); const fileMetadata = { name: 'config.json', parents: ['appDataFolder'], }; const media = { mimeType: 'application/json', body: fs.createReadStream('files/config.json'), }; try { const file = await service.files.create({ resource: 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 uploadAppData() { try { $client = new Client(); $client->useApplicationDefaultCredentials(); $client->addScope(Drive::DRIVE); $client->addScope(Drive::DRIVE_APPDATA); $driveService = new Drive($client); $fileMetadata = new Drive\DriveFile(array( 'name' => 'config.json', 'parents' => array('appDataFolder') )); $content = file_get_contents('../files/config.json'); $file = $driveService->files->create($fileMetadata, array( 'data' => $content, 'mimeType' => 'application/json', 'uploadType' => 'multipart', 'fields' => 'id')); printf("File 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 of demonstrate the use of Drive upload app data. public class UploadAppData { /// <summary> /// Insert a file in the application data folder and prints file Id. /// </summary> /// <param name="filePath">File path to upload.</param> /// <returns>ID's of the inserted files, null otherwise.</returns> public static string DriveUploadAppData(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.DriveAppdata); // Create Drive API service. var service = new DriveService(new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = "Drive API Snippets" }); var fileMetadata = new Google.Apis.Drive.v3.Data.File() { Name = "config.json", Parents = new List<string>() { "appDataFolder" } }; FilesResource.CreateMediaUpload request; using (var stream = new FileStream(filePath, FileMode.Open)) { request = service.Files.Create( fileMetadata, stream, "application/json"); request.Fields = "id"; request.Upload(); } var file = request.ResponseBody; // Prints the 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 { throw; } } return null; } } }
フォルダ内にファイルを作成する方法の詳細については、フォルダの作成と入力をご覧ください。
アプリケーション データフォルダ内のファイルを検索する
アプリデータ フォルダ内のファイルを検索するには、spaces
フィールドを appDataFolder
に設定し、files.list
メソッドを使用します。次のコードサンプルは、クライアント ライブラリを使用してアプリデータ フォルダ内のファイルを検索する方法を示しています。
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.api.services.drive.model.FileList; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; import java.io.IOException; import java.util.Arrays; /** * Class to demonstrate use-case of list 10 files in the application data folder. */ public class ListAppData { /** * list down files in the application data folder. * * @return list of 10 files. */ public static FileList listAppData() 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 = null; try { credentials = GoogleCredentials.getApplicationDefault() .createScoped(Arrays.asList(DriveScopes.DRIVE_APPDATA)); } catch (IOException e) { e.printStackTrace(); } 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(); try { FileList files = service.files().list() .setSpaces("appDataFolder") .setFields("nextPageToken, files(id, name)") .setPageSize(10) .execute(); for (File file : files.getFiles()) { System.out.printf("Found file: %s (%s)\n", file.getName(), file.getId()); } return files; } catch (GoogleJsonResponseException e) { // TODO(developer) - handle error appropriately System.err.println("Unable to list files: " + e.getDetails()); throw e; } } }
Python
from __future__ import print_function import google.auth from googleapiclient.discovery import build from googleapiclient.errors import HttpError def list_appdata(): """List all files inserted in the application data folder prints file titles with Ids. Returns : List of items 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 response = service.files().list(spaces='appDataFolder', fields='nextPageToken, files(id, ' 'name)', pageSize=10).execute() for file in response.get('files', []): # Process change print(F'Found file: {file.get("name")}, {file.get("id")}') except HttpError as error: print(F'An error occurred: {error}') response = None return response.get('files') if __name__ == '__main__': list_appdata()
Node.js
/** * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * List all files inserted in the application data folder * */ async function listAppdata() { // 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.appdata', }); const service = google.drive({version: 'v3', auth}); try { const res = await service.files.list({ spaces: 'appDataFolder', fields: 'nextPageToken, files(id, name)', pageSize: 100, }); res.data.files.forEach(function(file) { console.log('Found file:', file.name, file.id); }); return res.data.files; } catch (err) { // TODO(developer) - Handle error throw err; } } module.exports = listAppdata;
PHP
use Google\Client; use Google\Service\Drive; function listAppData() { try { $client = new Client(); $client->useApplicationDefaultCredentials(); $client->addScope(Drive::DRIVE); $driveService = new Drive($client); $response = $driveService->files->listFiles(array( 'spaces' => 'appDataFolder', 'fields' => 'nextPageToken, files(id, name)', 'pageSize' => 10 )); foreach ($response->files as $file) { printf("Found file: %s (%s)", $file->name, $file->id); } return $response->files; }catch(Exception $e) { echo "Error Message: ".$e; } }
.NET
using Google.Apis.Auth.OAuth2; using Google.Apis.Drive.v3; using Google.Apis.Drive.v3.Data; using Google.Apis.Services; namespace DriveV3Snippets { // Class to demonstrate use-case of Drive's list files in the application data folder. public class ListAppData { /// <summary> /// List down files in the application data folder. /// </summary> /// <returns>list of 10 files, null otherwise.</returns> public static FileList DriveListAppData() { 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.DriveAppdata); // Create Drive API service. var service = new DriveService(new BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = "Drive API Snippets" }); var request = service.Files.List(); request.Spaces = "appDataFolder"; request.Fields = "nextPageToken, files(id, name)"; request.PageSize = 10; var result = request.Execute(); foreach (var file in result.Files) { // Prints the list of 10 file names. Console.WriteLine("Found file: {0} ({1})", file.Name, file.Id); } return result; } catch (Exception e) { // TODO(developer) - handle error appropriately if (e is AggregateException) { Console.WriteLine("Credential Not found"); } else { throw; } } return null; } } }
アプリケーション データフォルダからファイルをダウンロードする
アプリデータ フォルダからファイルをダウンロードするには、files.get
メソッドを使用します。詳細とコードサンプルについては、blob ファイルのコンテンツをダウンロードするをご覧ください。