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”为真,每个文件权限需要指定 roletypeemail addressdomain。作为文件(文档、表格等)的所有者,您需要提供适当的权限才能设置为。

这是一个例子,使用 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 函数的一部分调用,我会收到上述错误,但在创建文件夹后,在单独的函数中转移所有权,工作正常。