Google Drive复制,将Team Drive(服务)复制到My Drive(用户)

时间:2018-12-21 17:58:20

标签: java google-drive-api google-docs google-drive-team-drive

我正在尝试执行我认为会很简单的操作,但是Google API出现了一些问题。我有两个Google凭据,一个来自服务帐户,一个来自访问该应用程序的用户的访问/刷新。

服务帐户具有域范围的委派。

在服务帐户可以访问的团队驱动器上(模板),我有一个文档想复制到用户的“我的驱动器”(根)上。我有以下文件夹的ID:

String userRootId = userCredential.drive().files().get( "root" ).setFields( "id" ).execute().getId();

哪个返回正确的标识符。使用服务帐户复制文件时,我可以整天在Team Drive中进行复制。当我将其复制到用户驱动器时,我得到“找不到文件:$ userRootId”。

我假设这是由于服务帐户无法访问用户的“我的云端硬盘”而造成的。如何使该操作起作用?有人尝试过吗?

1 个答案:

答案 0 :(得分:1)

好的,所以我想出了一种适用于我的实现的方法。我具有目标用户驱动器的访问/刷新令牌。如果没有,我不确定如何使它工作。步骤如下:

  1. 使用以下方法获取SERVICE ACCOUNT根目录:

    String serviceRootId = this.serviceManager.drive().files().get( "root" ).setFields( "id" ).execute().getId();
    
  2. 使用服务帐户复制文件

    • 删除团队合作伙伴
    • 将父项设置为服务根ID。这会将其从团队协作中删除,因此您实际上可以对其进行处理。
  3. 与具有“作者”权限的用户共享文件(这消除了任何域问题)
  4. 现在,使用USER'S令牌,复制您刚刚共享的文件
  5. 删除服务帐户与用户共享的文件。

这一切似乎有些愚蠢,但是鉴于Google云端硬盘当前的限制,我认为这是唯一的方法。我本来希望允许具有域范围委托的服务帐户仅复制内容,但事实并非如此。

如果有更好的方法,我很高兴学习,但是目前看来,这是行得通的。