转移文件的所有权失败 - 即使是超级管理员(Google Drive API,Java)

时间:2013-08-08 13:16:43

标签: google-drive-api

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

所以简单的场景是:

  1. user@domain.com 拥有文件
  2. 所有权需要转移到 admin@domain.com (超级管理员)。代码在Java Servlet中的AppEngine中运行。超级管理员使用OAuth进行身份验证。
  3. 然而它总是在行update.execute();中抛出(500 OK)异常(最后显示)。 即使是超级管理员,这项操作也不可能吗?

    感谢您的任何提示!

    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"
    }
    

2 个答案:

答案 0 :(得分:1)

我终于至少部分工作了。感谢@ZigMandel的“假冒”提示!现在我仔细地遵循了这个Domain-wide Delegation of Authority。并使用了使用“服务帐户”-key创建的GoogleCredential。有了这个凭据,我可以模拟Drive API操作,例如添加权限和将所有权转移给Admin。

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

答案 1 :(得分:0)

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