Google drive API PHP: невозможно вставить файлы или папки в подпапки

Я долгое время боролся; через Google диски PHP API, я могу создать подпапку или добавить файлы в существующую папку, но попытка поместить другую подпапку или файл в подпапку кажется невозможной.

После исследования я столкнулся с функцией «Дети», но не понимаю, как ее применять, даже после проверки документации Google на этой странице: [ https://developers.google.com/drive/v2/reference/children/insert ] [1]

Код, который я использую для добавления изображения в папку, это:

//Insert a file into client specific folder $file = new Google_Service_Drive_DriveFile(); $file->setTitle(uniqid().'.jpg'); $file->setDescription('A test document'); $file->setMimeType('image/jpeg'); $data = file_get_contents('a.jpg'); $parent = new Google_Service_Drive_ParentReference(); //previously Google_ParentReference $parent->setId($folderid); //$folderid = determined folder id $file->setParents(array($parent)); $createdFile = $service->files->insert($file, array( 'data' => $data, 'mimeType' => 'image/jpeg', 'uploadType' => 'multipart' )); 

Как я могу приступить к загрузке этого изображения в определенную подпапку, идентификатор которой уже определен?

Обновление: это мой комбинированный код, пытающийся:

  1. Создайте new_sub_folder1 с родителем существующей_папки и сохраните возвращенный идентификатор
  2. Создайте new_file1 с родителем new_sub_folder1, используя идентификатор, сохраненный на шаге 1
 $service = new Google_Service_Drive($client); //create sub folder $folder = new Google_Service_Drive_DriveFile(); //Setup the folder to create $folder->setTitle('new_sub_folder1'); $folder->setMimeType('application/vnd.google-apps.folder'); //Create the Folder within existing_folder $parentid = '0B40CySVsd_Jaa1BzVUQwLUFyODA'; //Set the Parent Folder to existing_folder $parent = new Google_Service_Drive_ParentReference(); //previously Google_ParentReference $parent->setId($parentid); $folder->setParents(array($parent)); //now create the client specific folder new_sub_folder try { $createdFile = $service->files->insert($folder, array( 'mimeType' => 'application/vnd.google-apps.folder', )); // Return the created folder's id $subfolderid = $createdFile->id; echo $subfolderid; return $createdFile->id; } catch (Exception $e) { print "An error occurred: " . $e->getMessage(); } //Insert a file into client specific folder new_sub_folder $file = new Google_Service_Drive_DriveFile(); $file->setTitle(uniqid().'.jpg'); $file->setDescription('A test document'); $file->setMimeType('image/jpeg'); $data = file_get_contents('a.jpg'); //Set the Parent Folder to new_sub_folder $parent = new Google_Service_Drive_ParentReference(); //previously Google_ParentReference $parent->setId($subfolderid); $file->setParents(array($parent)); $createdFile = $service->files->insert($file, array( 'data' => $data, 'mimeType' => 'image/jpeg', 'uploadType' => 'multipart' )); print_r($createdFile); , $service = new Google_Service_Drive($client); //create sub folder $folder = new Google_Service_Drive_DriveFile(); //Setup the folder to create $folder->setTitle('new_sub_folder1'); $folder->setMimeType('application/vnd.google-apps.folder'); //Create the Folder within existing_folder $parentid = '0B40CySVsd_Jaa1BzVUQwLUFyODA'; //Set the Parent Folder to existing_folder $parent = new Google_Service_Drive_ParentReference(); //previously Google_ParentReference $parent->setId($parentid); $folder->setParents(array($parent)); //now create the client specific folder new_sub_folder try { $createdFile = $service->files->insert($folder, array( 'mimeType' => 'application/vnd.google-apps.folder', )); // Return the created folder's id $subfolderid = $createdFile->id; echo $subfolderid; return $createdFile->id; } catch (Exception $e) { print "An error occurred: " . $e->getMessage(); } //Insert a file into client specific folder new_sub_folder $file = new Google_Service_Drive_DriveFile(); $file->setTitle(uniqid().'.jpg'); $file->setDescription('A test document'); $file->setMimeType('image/jpeg'); $data = file_get_contents('a.jpg'); //Set the Parent Folder to new_sub_folder $parent = new Google_Service_Drive_ParentReference(); //previously Google_ParentReference $parent->setId($subfolderid); $file->setParents(array($parent)); $createdFile = $service->files->insert($file, array( 'data' => $data, 'mimeType' => 'image/jpeg', 'uploadType' => 'multipart' )); print_r($createdFile); , $service = new Google_Service_Drive($client); //create sub folder $folder = new Google_Service_Drive_DriveFile(); //Setup the folder to create $folder->setTitle('new_sub_folder1'); $folder->setMimeType('application/vnd.google-apps.folder'); //Create the Folder within existing_folder $parentid = '0B40CySVsd_Jaa1BzVUQwLUFyODA'; //Set the Parent Folder to existing_folder $parent = new Google_Service_Drive_ParentReference(); //previously Google_ParentReference $parent->setId($parentid); $folder->setParents(array($parent)); //now create the client specific folder new_sub_folder try { $createdFile = $service->files->insert($folder, array( 'mimeType' => 'application/vnd.google-apps.folder', )); // Return the created folder's id $subfolderid = $createdFile->id; echo $subfolderid; return $createdFile->id; } catch (Exception $e) { print "An error occurred: " . $e->getMessage(); } //Insert a file into client specific folder new_sub_folder $file = new Google_Service_Drive_DriveFile(); $file->setTitle(uniqid().'.jpg'); $file->setDescription('A test document'); $file->setMimeType('image/jpeg'); $data = file_get_contents('a.jpg'); //Set the Parent Folder to new_sub_folder $parent = new Google_Service_Drive_ParentReference(); //previously Google_ParentReference $parent->setId($subfolderid); $file->setParents(array($parent)); $createdFile = $service->files->insert($file, array( 'data' => $data, 'mimeType' => 'image/jpeg', 'uploadType' => 'multipart' )); print_r($createdFile); 

Но создается только new_sub_folder1, и файл не добавляется в эту папку.

Обновление: изображение не добавляется нигде с этим кодом. Если я применяю тот же метод для добавления .jpg в существующую папку, по ее идентификатору проблем нет. Как только я использую идентификатор sub_folder_1, ничего не создается – тот же метод, другой идентификатор.

Подумайте о папках в качестве поезда. Если ваш файл (в данном случае папка) должен быть прикреплен к двум другим поездам для поезда, чтобы работать. Предыдущий является родительским, а следующий – дочерним. Если вы укажете родителя, но не ребенка для папки, тогда поезд будет неполным. Иногда неважно, что поезд не завершен, но если вы хотите использовать как минимум 2 уровня файлов, тогда вы должны использовать ссылки родителей и детей.

У вашей базовой папки может быть корень в качестве родителя, тогда эта папка может быть отцом другой подпапки, но необходимо указать, что у нее есть дети, если вы планируете использовать несколько иерархии уровней, чтобы иметь полную ссылку. Поэтому проверьте этот код:

 $foldID=$id; $folder4=new Google_Service_Drive_DriveFile(); $folder4->setTitle($folderName); $folder4->setMimeType('application/vnd.google-apps.folder'); $parent4=new Google_Service_Drive_ParentReference(); $parent4->setId($foldID); $folder4->setParents(array($parent4)); try { $createdFile4 = $service->files->insert($folder4, array( 'mimeType' => 'application/vnd.google-apps.folder', )); } catch (Exception $e) { print "An error occurred: " . $e->getMessage(); } $foldId4=$createdFile4->id; $newChild4=new Google_Service_Drive_ChildReference(); $newChild4->setId($createdFile4->id); try{ $service->children->insert($foldID,$newChild4); } catch (Exception $e) { print "An error occurred: " . $e->getMessage(); } 

Несколько вещей о коде: foldID – это мой тип основной или корневой папки. Я создаю новый DriveFile, назначаю спецификации папок, назначаю родительскую ссылку в моей главной папке, пытаюсь ее вставить, а затем укажите дочернюю ссылку с помощью child-> insert (ID OF MY MASTER FOLDER, ID СОЗДАННОЙ ПАПКИ). Ссылка теперь завершена, и вложенную папку следует рассматривать как таковую. Для другой под-подпапки просто промойте и повторите с правильными параметрами. У меня есть структура каталогов примерно на 6 или 7 уровней папок и файлов, так что это возможно, так что просто нужно правильно индексировать файлы.

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

Вы говорите: «Я не могу: existing_folder -> new_sub_folder1-> new_file1, new_file2,"

В драйвере это просто: –

  1. Создайте new_sub_folder1 с родителем существующей_папки и сохраните возвращенный идентификатор
  2. Создайте new_file1 с родителем new_sub_folder1, используя идентификатор, сохраненный на шаге 1