Родители папки настроек API Google Диска

Я пытался использовать google api для создания сначала корневой папки, а затем подпапок внутри этой корневой папки. Однако результаты были менее чем обнадеживающими. Вот код для создания папок:

public function createFolder($name, $parents = array())
    {    
        /** @var $client \Google_Client */
        $client = $this->client;
        /** @var $service \Google_Service_Drive */
        $service = $this->service;

        if (is_null($service)) {
            throw new Exception("Invalid google api service");
        }

        if (!$client instanceof \Google_Client) {
            throw new Exception("Invalid google api client");
        }

        if (!isset($_SESSION['access_token'])) {
            throw new Exception("No access token found");
        }

        if (!$client->getAccessToken()) {
            throw new Exception("Could not find access token in client");
        }

        $folder = new \Google_Service_Drive_DriveFile();
        $folder->setTitle($name);
        $folder->setMimeType('application/vnd.google-apps.folder');

        if (!empty($parents)) {
            echo "Setting parents of $name to: " . implode(',', $parents);
            $folder->setParents($parents);
        } else {
            echo "\n No parent ids found \n";
        }


        echo "\n Creating new folder: {$name} \n";

        $output = $service->files->insert($folder, array(
            'mimeType' => 'application/vnd.google-apps.folder',
        ));

        return $output;

    }

Однако всякий раз, когда я запускаю этот сценарий, родители не устанавливаются. Вместо этого подпапки находятся на диске рядом с родительской папкой.

Также я попытался установить родительские флаги вручную вот так:

public function insertFileToFolder($childId, $parentId)
    {
        if (empty($childId) || empty($parentId)) {
            throw new Exception("Invalid parameter");
        }

        $service = $this->getService();

        try {

            echo "\n Trying to set subfolders \n";
            $parentReference = new \Google_Service_Drive_ParentReference();
            $parentReference->setId($parentId);

            return $service->parents->insert($childId, $parentReference);

        } catch (Exception $ex) {
            echo $ex->getMessage();
        }

        return null;
    }

Что действительно работает ... вроде как. Он не «перемещает» подпапки в родительскую, а вместо этого либо копирует их, либо создает какую-то символическую ссылку, и папки кажутся находящимися в родительской папке.

Изменить: я подтвердил, что insertFileToFolder не копирует файлы, а вместо этого устанавливает символические ссылки. Удаление папки из корня также удаляет ее из родительской папки.

На самом деле простой вопрос: что мне не хватает?


person Tomkarho    schedule 04.02.2015    source источник


Ответы (1)


В вашей функции 'insertFileToFolder' вместо использования функции parent-> insert используйте children-> insert ('FolderID', 'newChild')

Вы можете увидеть точную реализацию по этой ссылке: https://developers.google.com/drive/v2/reference/children/insert#examples

person Rivero    schedule 04.02.2015