應用程式資料夾是一個特殊隱藏資料夾,可供應用程式使用 儲存應用程式專屬資料,如設定檔。應用程式 當您嘗試在資料夾中建立檔案時,系統會自動建立該資料夾。 請使用這個資料夾儲存使用者不應直接互動的任何檔案 。只有您的應用程式可以存取這個資料夾,且資料夾內容 隱藏。
「appDataFolder
」中的檔案無法在儲存空間位置 (空格) 之間移動。適用對象
詳情請參閱「檔案整理」。
當使用者從下列來源解除安裝應用程式時,系統會刪除應用程式資料夾: 或「我的雲端硬碟」。使用者也可以手動刪除應用程式的資料夾。
應用程式資料夾範圍
您必須先要求下列項目的存取權,才能存取應用程式資料資料夾:
https://www.googleapis.com/auth/drive.appdata
範圍。如要進一步瞭解
如要進一步瞭解範圍,以及如何要求這些範圍的存取權,請參閱 API 專屬
授權和驗證
資訊。如要進一步瞭解
特定 OAuth 2.0 範圍,請參閱 Google 適用的 OAuth 2.0 範圍
API
在應用程式資料資料夾中建立檔案
如要在應用程式資料資料夾中建立檔案,請在appDataFolder
parents
屬性,並使用 files.create
方法將檔案上傳至資料夾。以下程式碼
範例顯示如何使用用戶端程式庫,將檔案插入資料夾。
Java
drive/snippets/drive_v3/src/main/java/UploadAppData.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
drive/snippets/drive-v3/app_data_snippet/upload_appdata.py
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
drive/snippets/drive_v3/appdata_snippets/upload_appdata.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({ 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
drive/snippets/drive_v3/src/DriveUploadAppData.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
drive/snippets/drive_v3/DriveV3Snippets/UploadAppData.cs
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
drive/snippets/drive_v3/src/main/java/ListAppData.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
drive/snippets/drive-v3/app_data_snippet/list_appdata.py
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
drive/snippets/drive_v3/appdata_snippets/list_appdata.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
drive/snippets/drive_v3/src/DriveListAppData.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
drive/snippets/drive_v3/DriveV3Snippets/ListAppData.cs
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 檔案
內容。