首页 > 解决方案 > 在文件夹中搜索具有我指定名称的任何子文件夹并获取其 ID

问题描述

您好,我正在尝试在 google 驱动器文件夹上进行搜索,如果子文件夹存在,那么我会获取子文件夹的 id,如果不存在,那么我需要创建它并获取它的 id,以便稍后将文件上传到它。

所有搜索都将在主文件夹中,而且我试图根据文件夹的名称查找该文件夹是否存在,我为此使用 php,

到目前为止,我已经设法使用 var_dump 在图像中获取像这样的数组,其中包含我试图找到的 id,其中包含一些乱码,也许如果有办法清理它

    $mainfolderId = "1CpRAH5PTisqdfsdqfsIAsdfsdoyfuELsVixBtJA"; // main folder where evrthing is saved don't edit
    $folderName = "one ya"; // Please set the series folder name here.
    $optParams = array(
      'pageSize' => 10,
      'fields' => 'nextPageToken, files',
      'q' => "name = '".$folderName."' and mimeType = 'application/vnd.google-apps.folder' "
    );
    $results = $service->files->listFiles($optParams);
    print_r($results); 

这就是我得到的(我使用了一个工具让它看起来更令人愉悦)我还删除了其余的,因为它太多了你也可以看到 ["id"]=> string(33) 是我需要的

object(Google_Service_Drive_DriveFile)#81 (76) {
["collection_key":protected]=> string(6) "spaces"
["appProperties"]=> NULL
["capabilitiesType":protected]=> string(42) "Google_Service_Drive_DriveFileCapabilities"
["capabilitiesDataType":protected]=> string(0) ""
["contentHintsType":protected]=> string(42) "Google_Service_Drive_DriveFileContentHints"
["contentHintsDataType":protected]=> string(0) ""
["contentRestrictionsType":protected]=> string(39) "Google_Service_Drive_ContentRestriction"
["contentRestrictionsDataType":protected]=> string(5) "array"
["copyRequiresWriterPermission"]=> bool(false)
["createdTime"]=> string(24) "2021-01-24T09:22:59.645Z"
["description"]=> NULL
["driveId"]=> NULL
["explicitlyTrashed"]=> bool(false)
["exportLinks"]=> NULL
["fileExtension"]=> NULL
["folderColorRgb"]=> string(7) "#8f8f8f"
["fullFileExtension"]=> NULL
["hasAugmentedPermissions"]=> NULL
["hasThumbnail"]=> bool(false)
["headRevisionId"]=> NULL
["iconLink"]=> string(96) "hisddddddddennn by me "
["id"]=> string(33) "1XAmpgAVPudqFzfRoMAny"  <----------- thiiiiiiiisss
["imageMediaMetadataType":protected]=> string(48) "Google_Service_Drive_DriveFileImageMediaMetadata"
["imageMediaMetadataDataType":protected]=> string(0) ""
["isAppAuthorized"]=> bool(false)
["kind"]=> string(10) "drive#file"
["lastModifyingUserType":protected]=> string(25) "Google_Service_Drive_User"
["lastModifyingUserDataType":protected]=>

标签: phpgoogle-drive-api

解决方案


我相信你的目标和目前的情况如下。

  • 您要检查 的文件夹$folderName是否存在于 的特定文件夹中$mainfolderId
  • 当文件夹$folderName存在时,您要检索文件夹 ID。
  • 当文件夹$folderName不存在时,您想使用文件夹名称创建新文件夹$folderName并检索文件夹 ID。
  • 您想使用 Drive API v3 和 googleapis for PHP 来实现这一点。
  • 您已经能够使用 Drive API 检索文件元数据。

修改点:

  • 在你的脚本中,
    • $mainfolderId未使用。在这种情况下,为了在特定文件夹中搜索文件夹,'{$mainfolderId}' in parents需要使用。
    • $folderName需要添加用于检查特定文件夹中是否存在的文件夹的脚本。
    • 需要添加创建新文件夹的脚本。

当以上几点反映到脚本时,它变成如下。

示例脚本:

$mainfolderId = "###";  // Please set the folder ID you want to search folder.
$folderName = "###";  // Please set the folder name you want to search.

$service = new Google_Service_Drive($client);
$folders = $service->files->listFiles(array("q" => "name='{$folderName}' and '{$mainfolderId}' in parents and mimeType='application/vnd.google-apps.folder'"));
$folderId = '';
if (count($folders->getFiles()) == 0) {
    $f = new Google_Service_Drive_DriveFile();
    $f->setName($folderName);
    $f->setMimeType('application/vnd.google-apps.folder');
    $f->setParents(array($mainfolderId));
    $folderId = $service->files->create($f)->getId();
} else {
    $folderId = $folders->getFiles()[0]->getId();
}
print($folderId);
  • 在这个修改后的脚本中,$client没有显示用于检索的脚本。因为我认为从你的脚本和问题来看,授权范围的脚本已经准备好了。如果您需要了解脚本,请查看 PHP 快速入门。参考
  • 使用上述脚本时,如果 的文件夹中$folderName存在 的文件$mainfolderId夹,则返回现有文件夹的文件夹 ID。并且,当 的文件夹$folderName不存在于 的文件夹中时$mainfolderId,将创建新文件夹并返回创建的文件夹 ID。

笔记:

  • 在这种情况下,它假设您$service可以用于创建新文件夹。请注意这一点。
  • 如果与范围有关的错误,请使用https://www.googleapis.com/auth/drive.

参考:


推荐阅读