Google Drive API - 更改文件的所有者 - 权限错误400"需要权限类型字段"

时间:2015-09-01 02:49:03

标签: javascript json permissions google-api google-drive-api

我正在使用Google Apps脚本中的Google Drive API(这是沙盒服务器端Javascript,无法使用Google Client API for Javascript)。

我是Google Apps超级管理员,并使用域范围委派和服务帐户进行身份验证,以模拟用户,并且我可以成为域内其他用户的Files:get来电。

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

  1. 当作为用户A进行身份验证时,通过将用户B设置为其他所有者,将文件的所有权从用户A转移到用户B.

  2. 当用户A或B进行身份验证时,请将用户C设为文件的编辑者

  3. 我已成功完成第1步。

    对于第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个文件的循环中运行它)

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

1 个答案:

答案 0 :(得分:1)

想出来。

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

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