【问题标题】:google drive file.list query returns false for sub-folder ID - phpgoogle drive file.list 查询为子文件夹 ID 返回 false - php
【发布时间】:2019-12-12 11:07:53
【问题描述】:

我可以使用以下函数列出位于谷歌驱动器根目录中的文件夹中的项目。但是当我尝试在位于父文件夹内的子文件夹中列出项目时(父文件夹位于谷歌驱动器的根目录中)

[父文件夹] //“子文件夹”和“其他文件”正在列出 └------[SUB FOLDER] //当我尝试将此文件夹 ID 作为父文件夹时,查询返回 false | └--------[文件位于子文件夹内] └------[其他文件]

用于列出 google drive 中的文件的功能:

函数 listFilesFolders($client, $search, $subFolderId){ $service = new Google_Service_Drive($client); //位于谷歌驱动器根目录的文件夹ID //如果我使用此 ID 运行查询,则工作正常 $superParentId = '1Xky058b134vadgSOyD-ADFagaGAGAdgha'; //正常工作的查询 //$query = "'".$superParentId."' 在父母和垃圾= false"; //为位于父文件夹内的子文件夹运行的查询 ($superParentId) $query = "'".$subFolderId."' 在父母和垃圾= false"; $optParams = array('q' => $query); // 将文件和文件夹列表作为对象返回 $results = $service->files->listFiles($optParams); // 如果没有找到,则返回 false if (count($results->getFiles()) == 0) { 返回假; } // 将数组转换为对象 $结果 = 数组(); foreach ($results->getFiles() as $file) { $result[$file->getId()] = $file->getName(); } 返回$结果; }

我可以知道如何列出位于子文件夹中的文件吗?

谢谢,

【问题讨论】:

  • 您的方法需要递归并使用新的子文件夹调用自身。
  • 我被困在选择父文件夹的那一部分,然后使用子文件夹 ID(递归)运行查询。你能用代码sn-p提一下吗?
  • 你需要这样的东西 listFilesFolders($client, $search, $file->getId) 但我建议先检查它实际上是一个文件夹。检查文件类型,它会告诉你它是否是一个文件夹。抱歉,唯一的示例是在 C# 中,我现在没有时间在 php 中制作示例。

标签: php google-drive-api google-oauth google-api-php-client


【解决方案1】:

你需要做两件事

  1. 找出超级父文件夹中的哪些文件是子文件夹 您可以使用修改后的查询来做到这一点:
$query2 = "'$superParentId' in parents and trashed = false and mimeType='application/vnd.google-apps.folder'";
... 
  1. 循环列出这些子文件夹中包含的文件
...
$query3 = "'$subFolderId' in parents and trashed = false";
...

【讨论】:

  • 您好,我是否需要在从具有“SuperParentID”的查询中获取的每个循环中使用子文件夹 ID 运行 $service->files->listFiles($optParams)
  • 我可以在函数内获取 subFolderID 作为参数。当 O 使用参数运行时。它返回 false。
  • 确切地说,当您使用“SuperParentID”和mimeType='application/vnd.google-apps.folder' 运行查询时,您将获得一个可能包含多个子文件夹的数组。因此,您需要遍历这些子文件夹和每个子文件夹的 listFiles。
  • 在你用 PHP 实现它之前,我建议你用不同的查询尝试这个 API developers.google.com/drive/api/v3/reference/files/list developers.google.com/drive/api/v3/search-files
  • 嗨,我发现了这个问题。我正在使用范围drive.file。其中仅列出了我的应用程序创建的文件。子文件夹的内容直接从谷歌驱动器上传。这就是为什么它没有在循环中列出。正确使用的作用域是使用drive作用域。
猜你喜欢
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多