搜索具有我指定名称的任何子文件夹的文件夹并获取其 ID

search folder for any subfolder with name specified by me and get its id

你好,我正在尝试搜索 google 驱动器文件夹,如果该子文件夹存在,那么我将获取子文件夹的 ID,如果不存在,则我需要创建它并获取其 ID,以便我可以稍后上传文件到它。

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

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

    $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]=>

我相信你的目标和现状如下。

  • 您想检查 $folderName 的文件夹是否存在于 $mainfolderId 的特定文件夹中。
  • $folderName的文件夹存在时,您要检索文件夹ID。
  • $folderName 的文件夹不存在时,您想创建文件夹名称为 $folderName 的新文件夹并检索文件夹 ID。
  • 您想使用 Drive API v3 和用于 PHP 的 googleapis 来实现此目的。
  • 您已经能够使用云端硬盘 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 的快速入门。 Ref
  • 当使用上述脚本时,当$folderName的文件夹存在于$mainfolderId的文件夹中时,返回存在的文件夹的文件夹ID。并且,当 $folderName 的文件夹不存在于 $mainfolderId 的文件夹中时,将创建新文件夹并返回创建的文件夹 ID。

注:

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

参考文献: