java - 如何使用 Google Drive API v3 Java 的服务帐户访问 Team Drive

标签 java google-drive-api google-drive-shared-drive

下午好!

我在访问 Google Team Drive 时遇到问题。

我需要创建文件夹并从本地存储上传文件,所有这些都应该由我的应用程序完成。

目前,我已经学会了连接到我的个人 Google 云端硬盘并在那里上传文件。我的连接个人存储的代码:

        Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) //
                .setApplicationName(APPLICATION_NAME).build();


        // Print the names and IDs for up to 10 files.
        FileList result = service.files().list().setPageSize(10).setFields("nextPageToken, files(id, name)").execute();
        List<File> files = result.getFiles();
        if (files == null || files.isEmpty()) {
            System.out.println("No files found.");
        } else {
            System.out.println("Files:");
            for (File file : files) {
                System.out.printf("%s (%s)\n", file.getName(), file.getId());
            }
        }

告诉我,如何在 Java 中连接到 Google Team Drive 并在那里上传文件? 谢谢:)

最佳答案

使用 java 中的服务帐户连接到团队驱动器

假设您已经满足先决条件,即

  • 创建 Google 服务帐户
  • 下载其凭据
  • 与服务帐号共享团队云端硬盘,或者启用域范围委派来模拟有权访问团队云端硬盘的用户

您的代码应如下所示:

   private static final String APPLICATION_NAME = "YOUR APPLICATION";
   private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

   private static final List < String > SCOPES = Collections.singletonList("XXXINSERTHEREYOURSCOPEXXXX");

   public static void main(String...args) throws IOException, GeneralSecurityException {
    final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

    File pk12 = new File("quickstartserv.p12");
    String serviceAccount = "EMAIL FO YOUR SERVICE ACCOUNT.iam.gserviceaccount.com";

    // Build service account credential.Builder necessary for the ability to refresh tokens

    GoogleCredential getCredentials = new GoogleCredential.Builder()
     .setTransport(HTTP_TRANSPORT)
     .setJsonFactory(JSON_FACTORY)
     .setServiceAccountId(serviceAccount)
     .setServiceAccountPrivateKeyFromP12File(pk12)
     .setServiceAccountScopes(SCOPES)
     .setServiceAccountUser("xxx") //IF YOU WANT TO IMPERSONATE A USER
     .build();

    // Build a new authorized API client service.

    Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials)
     .setApplicationName(APPLICATION_NAME)
     .build();

     FileList result = service.files().list().setPageSize(10).setQ('"ID OF THE SHARED DRIVE" in parents').setIncludeTeamDriveItems(true).setSupportsTeamDrives(true).setFields("nextPageToken, files(id, name)").execute();
     ...
   }

请注意,从共享云端硬盘检索文件需要 setIncludeTeamDriveItems(true)setSupportsTeamDrives(true)

关于java - 如何使用 Google Drive API v3 Java 的服务帐户访问 Team Drive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60994563/

相关文章:

java - 使用 Jackson 将不同类型反序列化为单个字段

java - 将 PFX 静默安装到 Android 系统受信任的 CA 用户 keystore 中

java - 查找特定颜色Java

google-app-engine - Drive API 文件修补方法失败,出现 "Precondition Failed" "conditionNotMet"

python - Google Drive API v3 : service. files().list 未返回所有文件夹

php - php中的Google Drive API(团队驱动器)文件权限对任何人或特定域

在android中解压时发生java.io.FileNotFoundException

来自 Google Drive 的 Android Stream 视频

android - GoogleAccountCredential 重用授权 - Google 云端硬盘

javascript - 如果我没有权限,如何从 Google Drive 文件夹中隐藏嵌入文件的 iframe