如果使用所有者权限创建,则无法从新文件夹中删除根父级
Can't remove root parent from a new folder if is created with owner permissions
我正在给定文件夹 (FooFolder) 中创建一个文件夹 (New Folder)。
如果我使用 "writer" 作为权限角色一切正常。
My Drive
|->FooFolder
|->NewFolder
我有这三个功能:
function fileCreation($service, $fileName, $emailToOwn, $type )
{
//Create the file
$file = new Google_Service_Drive_DriveFile();
$file->setTitle($fileName);
$file->setMimeType($type);
$file = $service->files->insert( $file );
$permission = insertPermission($service, $file->getId(),$emailToOwn,"user","writer");
return $file;
}
function insertPermission($service, $fileId, $value, $type, $role) {
$newPermission = new Google_Service_Drive_Permission();
$newPermission->setValue($value);
$newPermission->setType($type);
$newPermission->setRole($role);
return $service->permissions->insert($fileId, $newPermission, array(NULL,false));
}
function insertFileIntoFolder($service, $folderId, $fileId) {
$newChild = new Google_Service_Drive_ChildReference();
$newChild->setId($fileId);
try {
return $service->children->insert($folderId, $newChild);
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return false;
}
当我将权限角色更改为 "Owner" 时,新文件夹会在父目录中正确创建并显示在根文件夹中。
一个link来一张我的驱动调用后的图片
$service->permissions->insert($fileId, "owner");
一个link来一张我的驱动调用后的图片
$service->permissions->insert($fileId, "writer");
我找到了解决方案
它成功地从我创建的每个文件夹中删除了父文件夹(我从 Drive-Api 文档中获得了代码)
/**
* Remove a root from a folder.
*
* @param Google_Service_Drive $service Drive API service instance.
* @param String $folderId ID of the folder to remove the file from.
* @param String $fileId ID of the file to remove from the folder.
*/
function removeRootFromFolder($service, $fileId) {
try {
$parents = $service->parents->listParents($fileId);
foreach ($parents->getItems() as $parent) {
if ($parent->getIsRoot())
{
$service->parents->delete($fileId, $parent->getId());
}
}
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
}
并更新了将文件放入文件夹的方法
/**
* Insert a file into a folder.
*
* @param Google_Service_Drive $service Drive API service instance.
* @param String $folderId ID of the folder to insert the file into.
* @param String $fileId ID of the file to insert.
* @return Google_Service_Drive_ChildReference The inserted child. NULL is
* returned if an API error occurred.
*/
function insertFileIntoFolder($service, $folderId, $fileId) {
$newChild = new Google_Service_Drive_ChildReference();
$newChild->setId($fileId);
try {
$r = $service->children->insert($folderId, $newChild);
removeRootFromFolder($service, $fileId);
return $r;
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return false;
}
我正在给定文件夹 (FooFolder) 中创建一个文件夹 (New Folder)。 如果我使用 "writer" 作为权限角色一切正常。
My Drive
|->FooFolder
|->NewFolder
我有这三个功能:
function fileCreation($service, $fileName, $emailToOwn, $type )
{
//Create the file
$file = new Google_Service_Drive_DriveFile();
$file->setTitle($fileName);
$file->setMimeType($type);
$file = $service->files->insert( $file );
$permission = insertPermission($service, $file->getId(),$emailToOwn,"user","writer");
return $file;
}
function insertPermission($service, $fileId, $value, $type, $role) {
$newPermission = new Google_Service_Drive_Permission();
$newPermission->setValue($value);
$newPermission->setType($type);
$newPermission->setRole($role);
return $service->permissions->insert($fileId, $newPermission, array(NULL,false));
}
function insertFileIntoFolder($service, $folderId, $fileId) {
$newChild = new Google_Service_Drive_ChildReference();
$newChild->setId($fileId);
try {
return $service->children->insert($folderId, $newChild);
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return false;
}
当我将权限角色更改为 "Owner" 时,新文件夹会在父目录中正确创建并显示在根文件夹中。
一个link来一张我的驱动调用后的图片 $service->permissions->insert($fileId, "owner");
一个link来一张我的驱动调用后的图片 $service->permissions->insert($fileId, "writer");
我找到了解决方案
它成功地从我创建的每个文件夹中删除了父文件夹(我从 Drive-Api 文档中获得了代码)
/**
* Remove a root from a folder.
*
* @param Google_Service_Drive $service Drive API service instance.
* @param String $folderId ID of the folder to remove the file from.
* @param String $fileId ID of the file to remove from the folder.
*/
function removeRootFromFolder($service, $fileId) {
try {
$parents = $service->parents->listParents($fileId);
foreach ($parents->getItems() as $parent) {
if ($parent->getIsRoot())
{
$service->parents->delete($fileId, $parent->getId());
}
}
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
}
并更新了将文件放入文件夹的方法
/**
* Insert a file into a folder.
*
* @param Google_Service_Drive $service Drive API service instance.
* @param String $folderId ID of the folder to insert the file into.
* @param String $fileId ID of the file to insert.
* @return Google_Service_Drive_ChildReference The inserted child. NULL is
* returned if an API error occurred.
*/
function insertFileIntoFolder($service, $folderId, $fileId) {
$newChild = new Google_Service_Drive_ChildReference();
$newChild->setId($fileId);
try {
$r = $service->children->insert($folderId, $newChild);
removeRootFromFolder($service, $fileId);
return $r;
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
return false;
}