Google 驱动器 API - 更改文件的所有者 - 权限错误 400 "Permission type field required"

Google Drive API - Changing Owner of a file - Permissions error 400 "Permission type field required"

我在 Google Apps 脚本中使用 Google Drive API(它是沙盒服务器端 Javascript,不能使用 Google 客户端 API Javascript)。

我是 Google Apps 超级管理员,使用全域委派和服务帐户来模拟用户进行身份验证,我可以作为其他用户成功进行 Files:get 调用域名。

现在我正在尝试将文件的所有权从用户 A 转移到用户 B,并通过执行以下步骤让用户 C 成为编辑者:

  1. 当验证为用户 A 时,通过将用户 B 设置为附加所有者,将文件的所有权从用户 A 转移给用户 B。

  2. 当验证为用户A或B时,让用户C成为文件的编辑者

我已经成功完成了第一步。

对于第 1 步,我假设将用户 B 添加为所有者的方法是使用 Permissions:insert,无论他们是否已在文件上共享。我写了这个:

var url = 'https://www.googleapis.com/drive/v2/files/' + fileId + '/permissions';

 var resource = {
  "type": "user",
  "role": "owner",
  "value": "userBEmail"
 };

 var requestBody = {};
 requestBody.method = 'POST';
 requestBody.headers = { Authorization: 'Bearer ' + service.getAccessToken() };
 requestBody.contentType = 'application/json';
 requestBody.resource = JSON.stringify(resource);
 requestBody.muteHttpExceptions = true;

 try {

   var response = UrlFetchApp.fetch(url, requestBody);

   var result = JSON.parse(response.getContentText());

   Logger.log('result: ' + JSON.stringify(result, null, 2));

 } catch(e) {

   Logger.log(e.message);

 }

结果是这样的:

{
  "error": {
    "errors": [
      {
        "domain": "global",
        "reason": "required",
        "message": "Permission type field required",
        "locationType": "other",
        "location": "permission.type"
      }
    ],
    "code": 400,
    "message": "Permission type field required"
  }
} 

我的问题:

  1. 这是将文件从一个用户传输到另一个用户的正确方法吗?

  2. 如果我包含了它为什么说 "Permission type field required"

  3. 在第 1 步工作后,有没有办法将第 2 步添加到同一个 API 调用中(出于性能原因,因为我计划 运行循环最多 1,000 个文件)

还值得一提:我能够使用 this page 底部的 API 资源管理器成功地将文件的所有权从我的帐户转移到另一个帐户。我提供了与请求正文完全相同的文件 ID 和内容。

想通了。

我使用 UrlFetchApp.getRequest() 查看正在发送的请求,发现它正在发送一个名为 payload 的 属性,它是空白的。

.resource更改为.payload,请求成功。