当前位置: 首页 > 知识库问答 >
问题:

无法将文件所有权从服务帐户转移到google drive用户

叶鸿振
2023-03-14

当试图转移所有权时,我得到以下错误:

"domain": "global",
"reason": "invalidSharingRequest",
"message": "Bad Request. User message: \"You can't change the owner of this item.\""

下面是我的代码:

use Google_Client; 
use Google_Service_Drive;
use Google_Service_Drive_DriveFile;
use Google_Service_Drive_Permission;

public function uploadDocument() {

 $FOLDER_ID = 'my_folder_ID_string';

 $client = new Google_Client();
 $client->setAuthConfig(base_path('service_account_credentials.json'));
 $client->setScopes(array('https://www.googleapis.com/auth/drive'));

 $service = new Google_Service_Drive($client);

 $fileMetadata = new Google_Service_Drive_DriveFile(array(
                                                     'name' => 'Test.pdf',
                                                     'parents' => [$FOLDER_ID]
                                                    ));

 $content = file_get_contents(public_path('tmp/Test.pdf'));

 $file = $service->files->create($fileMetadata, array(
                                                    'data' => $content,
                                                    'mimeType' => 'application/pdf',
                                                    'uploadType' => 'multipart',
                                                    'fields' => 'id'
                                                     ));

  // Transfer Ownership
  $newPermission = new Google_Service_Drive_Permission();
  $newPermission->setRole('owner');
  $newPermission->setType('user');
  $newPermission->setEmailAddress('email@gmail.com');
  $optParams = array('transferOwnership' => 'true');

  $service->permissions->create($file->id, $newPermission, $optParams);

}

该文件夹已成功上传到共享文件夹中的Google Drive(所有者为'email@gmail.com',服务帐户为'editor'),但上传文件的所有者为服务帐户,编辑器为'email@gmail.com'。

共有1个答案

钮出野
2023-03-14

根据文档:

共享驱动器中的文件由共享驱动器所有,而不是单个用户。

因此,没有必要从服务帐户中“拿走”所有权。

通过添加以下行修改代码

$Client->SetSubject($emailofUsertoImpersonate);

 类似资料:
  • 我正在谷歌驱动器上创建文件与服务帐户。NET客户端API。 我成功地创建了文件, 与所有域共享,但我不能将所有权转移到一个域用户。 我得到错误:

  • 我将私有存储库的所有权转移到了一个不同的GitHub帐户。存储库仍然是私有的。当我试图将更改从本地repo推到新的远程存储库时,它会给我带来致命的后果:错误。我已经更改了url、用户名和用户电子邮件。我能做些什么来解决这个问题呢?

  • 我们正在使用服务帐户从服务器上传文件,它已经达到其存储配额限制。所有文件都被添加到另一个用户创建的文件夹下(一个@gmail.com帐户,存储配额为100 Gb),但上传的所有文件都归服务帐户所有。 请注意,我们没有真正的用户,我们只是使用谷歌驱动器存储目的。 目前,我们无法上传任何更多的文件使用服务帐户。 null 谢谢

  • 我无法使用服务帐户插入google drive。相反,我可以使用相同的服务帐户从google drive下载和更新文件,而不会出现任何问题。我通过转到[我的项目]从特定用户(我们称之为用户“X”)的帐户中创建了服务帐户- 然后,我专门转到用户“X”的MyDrive上的一个文件夹,并将该文件夹与OAuth2的“创建新客户端ID”步骤生成的服务帐户电子邮件地址共享。我确保指定该文件夹的服务帐户权限为“

  • 我在AWS云服务中设置了一个项目。在那里我使用了EC2实例、AMI、弹性IP、互联网门路、NACL、路由表、安全组、自定义VPC、私有和公共子网、弹性负载平衡、自动伸缩、启动配置、KMS-key、Lambda、RDS Aurora实例、S3桶、简单电子邮件服务、简单队列服务、简单通知服务、云观察日志。现在我的客户要求将所有服务从现有的AWS帐户迁移到新的AWS帐户。