Я пытаюсь создать папку в Team Drive с помощью клиентской библиотеки Google API PHP.
Я использую учетную запись службы и выдаю себя за пользователя (пользователя), который является членом Team Drive и может отображать содержимое диска. Однако, когда я создаю папку, она всегда создает ее в «Мой диск», а не в Team Drive.
Попытка 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', 'supportsTeamDrives' => true, 'parents' => ['0AIuzzEYPQu9CUk9PVA'] ));
Попытка 2
$fileMetadata = new Google_Service_Drive_DriveFile(array( 'name' => 'New Test Folder', 'mimeType' => 'application/vnd.google-apps.folder', 'supportsTeamDrives' => true, 'teamDriveID' => '0AIuzzEYPQu9CUk9PVA' ));
ОБНОВЛЕНИЕ Попытка 3
$fileMetadata = new Google_Service_Drive_DriveFile(array( 'name' => 'Hello 123', 'supportsTeamDrives' => true, 'mimeType' => 'application/vnd.google-apps.folder', 'parents' => ['0AIuzzEYPQu9CUk9PVA'] )); $file = $service->files->create($fileMetadata, array( 'fields' => 'id')); printf("Folder ID: %s\n", $file->id);
Попытка 3 дает эту ошибку: Fatal error: Uncaught Google_Service_Exception: {"error": {"errors": [{"domain": "global", "reason": "notFound", "message": "Файл не найден: 0AIuzzEYPQu9CUk9PVA . "," locationType ":" parameter "," location ":" fileId "}]
Я прочитал всю (ограниченную) документацию, касающуюся Team Drive и API, и понял, что папка / файл в Team Drive может иметь только один родительский элемент (идентификатор Team Drive), поэтому я попробовал варианты родителя как массив и строку ,
Папка создана правильно, не в том месте.
Если у кого-нибудь есть идеи, я буду благодарен за помощь.
благодаря
В документации не очень понятно, как обращаться с созданием папок внутри Teamdrives, но это две вещи, которые необходимо учитывать:
1. 'supportsTeamDrives' => true,
является частью необязательных параметров, а не частью метаданных файла. 2. И parent
и teamDriveId
должны быть включены как часть метаданных
Итак, вот пример того, как добиться этого:
$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', 'teamDriveId' => $parent, 'parents' => array($parent) )); $optParams = array( 'fields' => 'id', 'supportsTeamDrives' => true, ); $createdFile = $service->files->create($file, $optParams); print "Created Folder: ".$createdFile->id;
Обратите внимание: вам понадобится клиентская библиотека версии 2.1.3 или выше.