Клиент PHP API Google Диска: создание папки на общем диске

#php #google-api #google-drive-api #google-api-php-client

#php #google-api #google-drive-api #google-api-php-client

Вопрос:

Я пытаюсь создать папку на вновь созданном общем диске, используя клиент PHP API Google со следующим кодом (обратите внимание, что подключение к API и сервис работают без проблем):

 //Create the drive
$drive = new Google_Service_Drive_Drive();
$drive->setName( "Drive Name" );

$create_drive_response = $service->drives->create( uniqid(), $drive );
$drive_id = $create_drive_response->id;     


//Create the folder
$folder = new Google_Service_Drive_DriveFile();
$folder->setName ( "Folder Name" );
$folder->setMimeType ( 'application/vnd.google-apps.folder' );
$folder->setDriveId ( $drive_id );

$optional_params = [ 'supportsAllDrives' => true];

$create_folder_response = $service->files->create( $folder, $optional_params );
$folder_id = $create_folder_response->id()
  

Диск создается без проблем, и папка создается без проблем, но независимо от того, что я делаю, папка всегда создается в корне моего диска, а не на вновь созданном диске. В ответе нет ошибок или предупреждений.

Ответ №1:

В документации об этом нигде не упоминается, но при создании папки или файла на общем диске вам необходимо установить как свойство ‘DriveId’, так и свойство ‘parents’ для идентификатора общего диска с помощью $folder->setParents ( $drive_id ); :

 //Create the drive
$drive = new Google_Service_Drive_Drive();
$drive->setName( "Drive Name" );

$create_drive_response = $service->drives->create( uniqid(), $drive );
$drive_id = $create_drive_response->id;     


//Create the folder
$folder = new Google_Service_Drive_DriveFile();
$folder->setName ( "Folder Name" );
$folder->setMimeType ( 'application/vnd.google-apps.folder' );
$folder->setDriveId ( $drive_id );
$folder->setParents ( $drive_id );

$optional_params = [ 'supportsAllDrives' => true];

$create_folder_response = $service->files->create( $folder, $optional_params );
$folder_id = $create_folder_response->id();
  

Комментарии:

1. Примечание: С 1 июня 2020 года параметр «supportsAllDrives» обесценился, и предполагается, что все приложения поддерживают общие диски. developers.google.com/resources/api-libraries/documentation /…

2. Получил его для работы $folder->setParents([$drive_id]); ( parents должен быть массив идентификаторов).

3. И ВКЛЮЧЕНИЕ supportsAllDrives параметра.