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 成为编辑者:
当验证为用户 A 时,通过将用户 B 设置为附加所有者,将文件的所有权从用户 A 转移给用户 B。
当验证为用户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"
}
}
我的问题:
这是将文件从一个用户传输到另一个用户的正确方法吗?
如果我包含了它为什么说 "Permission type field required"
?
在第 1 步工作后,有没有办法将第 2 步添加到同一个 API 调用中(出于性能原因,因为我计划 运行循环最多 1,000 个文件)
还值得一提:我能够使用 this page 底部的 API 资源管理器成功地将文件的所有权从我的帐户转移到另一个帐户。我提供了与请求正文完全相同的文件 ID 和内容。
想通了。
我使用 UrlFetchApp.getRequest() 查看正在发送的请求,发现它正在发送一个名为 payload
的 属性,它是空白的。
将.resource
更改为.payload
,请求成功。
我在 Google Apps 脚本中使用 Google Drive API(它是沙盒服务器端 Javascript,不能使用 Google 客户端 API Javascript)。
我是 Google Apps 超级管理员,使用全域委派和服务帐户来模拟用户进行身份验证,我可以作为其他用户成功进行 Files:get 调用域名。
现在我正在尝试将文件的所有权从用户 A 转移到用户 B,并通过执行以下步骤让用户 C 成为编辑者:
当验证为用户 A 时,通过将用户 B 设置为附加所有者,将文件的所有权从用户 A 转移给用户 B。
当验证为用户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"
}
}
我的问题:
这是将文件从一个用户传输到另一个用户的正确方法吗?
如果我包含了它为什么说
"Permission type field required"
?在第 1 步工作后,有没有办法将第 2 步添加到同一个 API 调用中(出于性能原因,因为我计划 运行循环最多 1,000 个文件)
还值得一提:我能够使用 this page 底部的 API 资源管理器成功地将文件的所有权从我的帐户转移到另一个帐户。我提供了与请求正文完全相同的文件 ID 和内容。
想通了。
我使用 UrlFetchApp.getRequest() 查看正在发送的请求,发现它正在发送一个名为 payload
的 属性,它是空白的。
将.resource
更改为.payload
,请求成功。