2

我正在尝试将文件的所有权转让给超级管理员。代码的基本部分如下所示。如果我转让我拥有的文档的所有权,则相同的代码可以工作。但在这种情况下,原始所有者是同一域中的另一个用户。[编辑]我知道管理面板中有一个“将文件的所有权从 1 用户转移到另一个”,但这对于需要来自多个所有者的多个文件/文件夹的情况是必需的以编程方式传输。[/编辑]

所以简单的场景是:

  1. user@domain.com拥有一个文件
  2. 所有权需要转移到admin@domain.com(超级管理员)。该代码在 Java Servlet 中的 AppEngine 中运行。超级管理员通过 OAuth 进行身份验证。

但是它总是会抛出(500 OK)异常update.execute();(最后显示)。即使是超级管理员也无法进行此操作吗?

感谢您的任何提示!

try {
   Drive service = getDriveService();
   Permission newPerm = new Permission();
   newPerm.setValue("admin@domain.com");
   newPerm.setType("user");
   newPerm.setRole("writer");
   newPerm = service.permissions().insert(fileId, newPerm).execute();
   newPerm.setRole("owner");
   Update update = service.permissions().update(fileId, newPerm.getId(), newPerm);
   update.setTransferOwnership(true);
   update.execute(); 
} catch (IOException e) {
   e.printStackTrace();
   log.severe(e.getMessage());
}

抛出的异常如下所示:

SEVERE: 500 OK
{
  "code" : 500,
  "errors" : [ {
    "domain" : "global",
    "message" : "Internal Error",
    "reason" : "internalError"
  } ],
  "message" : "Internal Error"
}
4

2 回答 2

1

我终于至少部分地得到了这个工作。感谢@ZigMandel 的“模仿”提示!现在我仔细遵循了这个域范围的授权。并使用GoogleCredential使用“服务帐户”创建的密钥。有了这个凭证,我可以模拟 Drive API 操作,例如添加权限和将所有权转移给管理员。

仍然存在的问题是,使用当前的 Drive API 无法以编程方式确定所有者电子邮件地址,而这是创建模拟凭据所必需的。现在我需要为此找到解决方法。无论如何,基本想法现在有效。谢谢!

于 2013-08-13T09:52:28.497 回答
0

您将无法从应用程序脚本中执行此操作。可以从 appengine 完成。我已经做到了,但它超出了这里解释的范围。涉及代表文件所有者使用驱动器 api 并在域级别添加 oauth 权限。

于 2013-08-08T22:27:08.627 回答