如何使用 Google API 在团队云端硬盘中创建文件夹?
我正在努力使用 Google API PHP 客户端库在团队云端硬盘中创建文件夹.
I'm struggling to create a folder within a Team Drive using the Google API PHP Client Library.
我正在使用服务帐户并冒充作为团队云端硬盘成员的用户(我自己)并且可以列出云端硬盘的内容.但是,当我创建文件夹时,它总是在我的云端硬盘"中创建,而不是在指定的团队云端硬盘中创建.
I am using a service account and impersonating a user (myself) who is a member of the Team Drive and can list the contents of the drive. However, when I create a folder it always creates it in 'My Drive' rather than the Team Drive specified.
尝试 1
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope("https://www.googleapis.com/auth/drive");
$client->setSubject('user@mydomain.com');
$service = new Google_Service_Drive($client);
$folderId = '0AIuzzEYPQu9CUk9PVA';
$fileMetadata = new Google_Service_Drive_DriveFile(array(
'name' => 'New Test Folder',
'mimeType' => 'application/vnd.google-apps.folder',
'supportsAllDrives' => true,
'parents' => ['0AIuzzEYPQu9CUk9PVA']
));
尝试 2
$fileMetadata = new Google_Service_Drive_DriveFile(array(
'name' => 'New Test Folder',
'mimeType' => 'application/vnd.google-apps.folder',
'supportsAllDrives' => true,
'driveId' => '0AIuzzEYPQu9CUk9PVA'
));
更新尝试 3
$fileMetadata = new Google_Service_Drive_DriveFile(array(
'name' => 'Hello 123',
'supportsAllDrives' => true,
'mimeType' => 'application/vnd.google-apps.folder',
'parents' => ['0AIuzzEYPQu9CUk9PVA']
));
$file = $service->files->create($fileMetadata, array(
'fields' => 'id'));
printf("Folder ID: %s
", $file->id);
尝试 3 出现此错误:致命错误:未捕获的 Google_Service_Exception: { "error": { "errors": [ { "domain": "global", "reason": "notFound", "message": "File not found: 0AIuzzEYPQu9CUk9PVA.", "locationType": "参数", "位置": "fileId" } ]
Attempt 3 gives this error: Fatal error: Uncaught Google_Service_Exception: { "error": { "errors": [ { "domain": "global", "reason": "notFound", "message": "File not found: 0AIuzzEYPQu9CUk9PVA.", "locationType": "parameter", "location": "fileId" } ]
我已阅读有关团队的所有(有限)文档驱动器和 API 并了解团队驱动器中的文件夹/文件只能有一个父级(团队驱动器的 ID),因此我尝试将父级的变体作为数组和字符串.
I have read all the (limited) documentation regarding Team Drive and the API and understand that a folder/file within a Team Drive can only have one parent (The Team Drive's ID) so I have tried variations of the parent as an array and string.
文件夹创建正确,只是位置错误.
The folder is created correctly, just in the wrong place.
推荐答案
关于如何在 Teamdrives 中创建文件夹的文档不是很清楚,但这是您需要注意的两件事:
The documentation is not very clear on how to handle the creation of folders inside Teamdrives but this are the two things you need to take note of:
1.'supportsAllDrives' =>true,
是可选参数的一部分,而不是文件元数据的一部分.2. parent
和 driveId
都应该包含在元数据中
1.'supportsAllDrives' => true,
is part of the optional parameters and not part of the file metadata.
2. Both the parent
and the driveId
should be included as part of the metadata
所以这是一个关于如何实现这一点的示例:
So here is an example on how to achieve this:
$service = new Google_Service_Drive($client);
$parent = "0AA3C8xRqwerLglUk9PVA"; //Teamdrive ID
//Create new folder
$file = new Google_Service_Drive_DriveFile(array(
'name' => 'Test Folder',
'mimeType' => 'application/vnd.google-apps.folder',
'driveId' => $parent,
'parents' => array($parent)
));
$optParams = array(
'fields' => 'id',
'supportsAllDrives' => true,
);
$createdFile = $service->files->create($file, $optParams);
print "Created Folder: ".$createdFile->id;
请注意:您需要 2.1.3 或更高版本的客户端库.
Please Note: You will need the client library version 2.1.3 or greater.
相关文章