Google 驱动器 API V3,PHP 客户端,转移文件所有权
Google Drive API V3, PHP Client, transfer file ownership
我正在尝试使用 Google 驱动器 API PHP 客户端创建文件夹并更改所有者。文件夹创建正确,我可以设置所有者以外的任何权限,return 这是一个错误。我的代码:
function createFolder($name, $parents, $mimeType)
{
$client = getClient();
$service = new Google_Service_Drive($client);
$folder = new Google_Service_Drive_DriveFile();
$folder->setName($name);
if ($parents) {$folder->setParents(array($parents));}
$folder->setMimeType($mimeType);
$created_folder = $service->files->create($folder);
$created_folder_id = $created_folder->getId();
$ownerPermission = new Google_Service_Drive_Permission();
$ownerPermission->setEmailAddress("shared@******.com");
$ownerPermission->setType('user');
$ownerPermission->setRole('owner');
$service->permissions->create($created_folder_id, $ownerPermission, array('transferOwnership' => 'true'));
return $created_folder_id;
}
和 return:
Fatal error: Uncaught Google\Service\Exception: {
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "The transferOwnership parameter must be enabled when the permission role is 'owner'.",
"locationType": "parameter",
"location": "transferOwnership"
}
],
"code": 403,
"message": "The transferOwnership parameter must be enabled when the permission role is 'owner'."
}
我没有正确设置 transferOwnership 参数吗?
@DLateef 如果你想让文件共享,你可能想在 Drive API 中阅读更多关于 Permission resource 的内容。要使“shared”为真,每个文件权限需要指定 role
、type
和 email address
或 domain
。作为文件(文档、表格等)的所有者,您需要提供适当的权限才能设置为。
这是一个例子,使用 Permissions.create
POST https://www.googleapis.com/drive/v3/files/{fileId}/permissions?key={YOUR_API_KEY}
{
"role": "reader",
"type": "user",
"emailAddress": "xxxxxxxx@xxx.com"
}
来自驱动器的响应Files.get:
GET https://www.googleapis.com/drive/v3/files/{fileId}?fields=appProperties%2CfileExtension%2Ckind%2CmimeType%2Cshared&key={YOUR_API_KEY}
{
"kind": "drive#file",
"mimeType": "application/vnd.google-apps.document",
"shared": true
}
但是,如果您无法切换到 Drive v3,您仍然可以使用 Drive v2 中的 Permission.insert 来完成这项工作。
要不然你也可以试试ownerPermission->setTransferOwnership(true);
我能够通过将创建文件夹的代码与转让所有权分开来实现它。如果作为同一 createFolder
函数的一部分调用,我会收到上述错误,但在创建文件夹后,在单独的函数中转移所有权,工作正常。
我正在尝试使用 Google 驱动器 API PHP 客户端创建文件夹并更改所有者。文件夹创建正确,我可以设置所有者以外的任何权限,return 这是一个错误。我的代码:
function createFolder($name, $parents, $mimeType)
{
$client = getClient();
$service = new Google_Service_Drive($client);
$folder = new Google_Service_Drive_DriveFile();
$folder->setName($name);
if ($parents) {$folder->setParents(array($parents));}
$folder->setMimeType($mimeType);
$created_folder = $service->files->create($folder);
$created_folder_id = $created_folder->getId();
$ownerPermission = new Google_Service_Drive_Permission();
$ownerPermission->setEmailAddress("shared@******.com");
$ownerPermission->setType('user');
$ownerPermission->setRole('owner');
$service->permissions->create($created_folder_id, $ownerPermission, array('transferOwnership' => 'true'));
return $created_folder_id;
}
和 return:
Fatal error: Uncaught Google\Service\Exception: {
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "The transferOwnership parameter must be enabled when the permission role is 'owner'.",
"locationType": "parameter",
"location": "transferOwnership"
}
],
"code": 403,
"message": "The transferOwnership parameter must be enabled when the permission role is 'owner'."
}
我没有正确设置 transferOwnership 参数吗?
@DLateef 如果你想让文件共享,你可能想在 Drive API 中阅读更多关于 Permission resource 的内容。要使“shared”为真,每个文件权限需要指定 role
、type
和 email address
或 domain
。作为文件(文档、表格等)的所有者,您需要提供适当的权限才能设置为。
这是一个例子,使用 Permissions.create
POST https://www.googleapis.com/drive/v3/files/{fileId}/permissions?key={YOUR_API_KEY}
{
"role": "reader",
"type": "user",
"emailAddress": "xxxxxxxx@xxx.com"
}
来自驱动器的响应Files.get:
GET https://www.googleapis.com/drive/v3/files/{fileId}?fields=appProperties%2CfileExtension%2Ckind%2CmimeType%2Cshared&key={YOUR_API_KEY}
{
"kind": "drive#file",
"mimeType": "application/vnd.google-apps.document",
"shared": true
}
但是,如果您无法切换到 Drive v3,您仍然可以使用 Drive v2 中的 Permission.insert 来完成这项工作。
要不然你也可以试试ownerPermission->setTransferOwnership(true);
我能够通过将创建文件夹的代码与转让所有权分开来实现它。如果作为同一 createFolder
函数的一部分调用,我会收到上述错误,但在创建文件夹后,在单独的函数中转移所有权,工作正常。