php - 在文件夹中搜索具有我指定名称的任何子文件夹并获取其 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]=>
解决方案
我相信你的目标和目前的情况如下。
- 您要检查 的文件夹
$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
.
参考:
推荐阅读
- hadoop - MapReduce 设置为提供多个输出文件,但第一份工作我只得到 1 个
- python - 包括以科学计数法编写的列表中的小数点数较少
- json - 将 JSON 传递给另一个视图控制器
- python - py4j.protocol.Py4JNetworkError: 尝试执行 df.show(5) 时来自 Java 端的答案为空
- typescript - Webpack 安装后无法解析“vue-property-decorator”(v10.X)库
- api - NavigationManager.getInstance() 不能为空
- blazor - 在 DynamicComponent Blazor 上轻松触发 OnParametersSet
- javascript - 数组上不存在属性“at”
- java - 无法弄清楚如何将 int 值从一个二维数组添加和转换为布尔二维数组
- c++ - 如何包装函数调用 C++ 来分配变量