当前位置: 首页 > 知识库问答 >
问题:

使用java中的服务帐户将数据上载到共享驱动器

翟嘉年
2023-03-14

我想用java将文件上传到共享驱动器。我已创建了一个服务帐户,并已将共享驱动器(名称为DB drive)与服务帐户的地址共享。

全局变量

private static HttpTransport httpTransport;
private static Drive drive;

主功能(初始化和列出文件)

    httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    Credential credential = authorize();
    drive = new Drive.Builder(httpTransport, JacksonFactory.getDefaultInstance(), credential).setApplicationName(
                    "Quickstart").build();

    uploadFile();

    FileList result = drive.files().list().execute();
    List<File> files = result.getFiles();
    if (result == null || result.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());
                }
            }
        } 

授权码

        GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("resources/credentials.json"))
                .createScoped(Collections.singleton(DriveScopes.DRIVE_FILE));

        return credential;

上传代码

 String folderId = "***DB-Drive id****";
        File fileMetadata = new File();
        fileMetadata.setName("photo.jpg");
        fileMetadata.setParents(Collections.singletonList(folderId));
        java.io.File filePath = new java.io.File("/home/*****/Downloads/qck_1552369371.jpeg");
        FileContent mediaContent = new FileContent("image/jpeg", filePath);
        File file = drive.files().create(fileMetadata, mediaContent)
                .setFields("id, parents")
                .execute();
        System.out.println("File ID: " + file.getId());
        return file;

我正在将DB Drive(teamdrive或shareddrive)设置为上传文件的父级,但我仍然无法在共享驱动器文件夹中查看该文件。。请帮帮我。

我正在添加完整的流程:-

1.)我使用https://developers.google.com/identity/protocols/oauth2/service-account提到的步骤创建服务号,我选择了项目并给出了描述和一切。

2.)我没有向服务帐户授予域级别的授权,而是使用服务帐户地址(credentials.json文件中提到的client_email*****.gserviceaccount.com)共享了DB驱动器(团队驱动器)

3.)然后我使用上面的代码上传文件,请求服务帐户将文件上传到共享驱动器,即DB驱动器,方法是将DB驱动器的id指定为文件的父id。

4.)但文件仍会上载到服务帐户的驱动器,而不会链接到共享驱动器。

5.)DB-Drive是父文件夹(唯一的文件夹)。

任何线索都会帮上大忙。

共有1个答案

利俊迈
2023-03-14

正如@ziganotschka指出的,如果在共享驱动器中创建文件,则需要将supportsAllDrives设置为true。Java客户端的setSupportSteamDrive选项已被弃用。而是使用setSupportsAllDrives设置为true。

  • 隔离问题
  • 扪心自问——问题是与服务帐户的使用有关还是与其他问题有关
  • 为此,请在没有服务帐户的情况下测试相同的请求
  • 如果服务账户是罪魁祸首
    • 验证您是否在GCP控制台中正确启用了域范围的委派
    • 验证您在管理控制台中为委托服务帐户提供了正确的作用域
    • 如果问题与编码有关-调试代码
    • 如果问题与请求相关,请根据Try this API返回的错误进行操作
    • 文件位于共享驱动器上(在这种情况下,您必须如上所述将supportsAllDrives设置为true

 类似资料:
  • 是否可以使用服务帐户创建共享驱动器?。 由于没有UI服务号创建文件/文件夹,我需要一些方法 /APIs支持创建共享驱动器。 我可以在服务号下创建孩子(文件和文件夹),但不确定如何使用服务号创建共享驱动器。 向你问好,索拉夫

  • 我试图创建一个共享驱动器(在谷歌驱动器),使用API v3(通过python客户端库google-api-python-Client)。下面的代码: 但出现了一个错误: GoogleapClient。错误。HttpError: 错误是直观的,但我的问题是关于我需要给API用户帐户的正确权限,因为: 这个用户不是个人帐户,但它是服务帐户,因为它在API中使用,应该为我的应用程序的每个客户创建一个共享

  • 我想上传文件到我的谷歌驱动器使用谷歌服务号凭据。 我从谷歌开发者控制台下载了一个JSON文件作为凭证,并从中获得了凭证。 这是我的代码片段。 代码运行,没有错误,但是我找不到上传到我的Google Drive帐户的文件。我不知道为什么文件没有上传。你愿意帮我解决这个问题吗?

  • 我已经建立了一个新的服务帐户,可以访问Google Drive API。我现在想与服务帐户用户共享我的一个驱动器。 现有建议建议建议您只需使用服务帐户电子邮件地址共享驱动器。不幸的是,这会产生以下错误: 我需要做些什么来让我的服务账户成为“谷歌账户”吗? 谢谢 卡尔

  • 谷歌应用程序管理服务帐户的“无限”帐户存储配额 你能帮忙吗?