如何searchGoogle云端硬盘中的子文件夹和子文件夹?

这是一个常见的问题。

情况是:

folderA____ folderA1____folderA1a \____folderA2____folderA2a \___folderA2b 

…问题是如何列出根文件夹A下所有文件夹中的所有文件。

首先要了解的是,在Google云端硬盘中,文件夹不是文件夹!

我们都习惯于在Windows / nix等文件夹(又名目录)的想法。在现实世界中,文件夹是一个容器,其中放置文件。 也可以在较大的文件夹中放置较小的文件夹。 因此,大文件夹可以被认为是包含其较小的子文件夹内的所有文件。

但是,在Google云端硬盘中,文件夹并不是一个容器,因此在Google云端硬盘的第一个版本中,它们甚至不被称为文件夹,因此被称为“集合”。 文件夹只是一个文件(a)没有内容,(b)一个特殊的MIMEtypes(application / vnd.google-apps.folder)。 文件夹的使用方式与使用标签(又名标签)的方式完全相同 。 理解这个最好的方法是考虑GMail。 如果您查看打开的邮件项目的顶部,则会看到两个图标。 工具提示“移至”的文件夹以及工具提示“标签”的标签。 点击其中任何一个,出现相同的对话框,都是关于标签。 您的标签在左侧列出,树状显示看起来很像文件夹。 重要的是,一个邮件项目可以有多个标签,或者你可以说,一个邮件项目可以在多个文件夹中。 Google云端硬盘文件夹的工作方式与GMail标签的工作方式完全相同。

确定一个文件夹只是一个标签,没有任何东西阻止你在类似文件夹树的层次结构中组织标签,事实上这是最常见的方式。

现在应该清楚,folderA2b中的文件(我们称之为MyFile)不是folderA的子孙或孙子。 它只是一个带有“folderA2b”标签(令人困惑地称为“父”)的文件。

好的,那我怎么把“folderA”下的所有文件都找回来呢?

备选1.recursion

诱惑将是列出folderA的孩子,为任何文件夹的孩子,recursion列出他们的孩子,冲洗,重复。 在极less数情况下,这可能是最好的方法,但是对于大多数情况来说,它有以下问题:

  • 为每个子文件夹执行服务器往返是非常耗时的。 这当然取决于你的树的大小,所以如果你能保证你的树的大小很小,那就可以了。

另类2.共同的父母

如果所有文件都是由您的应用程序创build的(即您正在使用drive.file范围),则此function效果最佳。 和上面的文件夹层次一样,创build一个名为say“MyAppCommonParent”的虚拟父文件夹。 当您将每个文件创build为其特定文件夹的子文件夹时,您还将其设置为MyAppCommonParent的子项。 如果您记得将文件夹视为标签,这会变得更加直观。 您现在可以通过简单地查询MyAppCommonParent in parents MyAppCommonParent来轻松检索所有的descdendants。

替代scheme3.首先文件夹

首先获取所有文件夹。 是的,所有这些。 一旦你把所有的东西都存在内存中,你可以爬过他们父母的属性,并build立你的树结构和文件夹ID列表。 然后你可以做一个files.list?q='folderA' in parents or 'folderA1' in parents or 'folderA1a' in parents... 使用这种技术,你可以得到一切在两个http调用。

备选scheme2是最有效的,但只有在您控制文件创build的情况下才有效。 替代scheme3通常比替代scheme1更有效,但是可能存在某些小的树尺寸,其中1是最好的。