Google 驱动器 api 设置文件夹 parents
Google Drive api setting folder parents
我一直在尝试使用 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;
}
然而,每当我 运行 这个脚本时, parent 都没有设置。相反,子文件夹位于 parent 文件夹旁边的驱动器中。
我也尝试像这样手动设置 parent 标志:
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;
}
哪个有用……有点。它不会 "move" parent 的子文件夹,而是复制它们或创建某种符号链接,并且这些文件夹似乎位于 parent 文件夹下。
编辑:我已经确认 insertFileToFolder 不会复制文件,而是设置符号链接。从根目录删除文件夹也会将其从 parent 文件夹中删除。
Simple question really: What am I missing?
在您的函数 'insertFileToFolder' 中,不要使用 parents->insert 函数,而是使用 children->insert('FolderID', 'newChild')
您可以在 link 上看到确切的实现:https://developers.google.com/drive/v2/reference/children/insert#examples
我一直在尝试使用 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;
}
然而,每当我 运行 这个脚本时, parent 都没有设置。相反,子文件夹位于 parent 文件夹旁边的驱动器中。
我也尝试像这样手动设置 parent 标志:
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;
}
哪个有用……有点。它不会 "move" parent 的子文件夹,而是复制它们或创建某种符号链接,并且这些文件夹似乎位于 parent 文件夹下。
编辑:我已经确认 insertFileToFolder 不会复制文件,而是设置符号链接。从根目录删除文件夹也会将其从 parent 文件夹中删除。
Simple question really: What am I missing?
在您的函数 'insertFileToFolder' 中,不要使用 parents->insert 函数,而是使用 children->insert('FolderID', 'newChild')
您可以在 link 上看到确切的实现:https://developers.google.com/drive/v2/reference/children/insert#examples