应用数据文件夹是一个特殊的隐藏文件夹,可供应用使用 来存储应用特定的数据,例如配置文件。应用 则当您尝试在该文件夹中创建文件时,系统会自动创建该文件夹。 使用此文件夹存储任何用户不应直接互动的文件 只有您的应用可以访问此文件夹,并且其中的内容 将对用户和其他云端硬盘应用隐藏。
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 文件
内容。