我正在考虑在我编写的iOS应用程序中添加对Google Drive的支持。这不是我的问题 - 有很多关于如何做到这一点的文档。
我的问题是此应用程序的数据源是文件夹。这个文件夹可以想象包含几十个(嵌套的)子文件夹和数百个文件。
当我搜索Google云端硬盘的文档时,有大量关于单个文件处理的信息;但是关于文件夹处理的信息非常少(除了文件夹之外似乎有唯一的MIME类型)。
因此,假设我可以运行查询以识别引用我感兴趣的文件夹(数据源)的GTLDriveFile,我需要将该文件夹的全部内容(完整的分层组织)下载到我的应用程序的沙箱中。顺便说一句,这个应用程序主要用于平板电脑(iPad)。
我该怎么做?
谢谢,
答案 0 :(得分:1)
Google Drive模型在内部是一个扁平模型,带有指向父母和孩子的指针,任何将其投影到传统树形模型中的实现都需要仔细考虑。
由于我不在iOS中工作,我会尽量保持一般,参考JAVA代码片段;它应该很容易翻译成任何语言(相信iOS有一些'C'风格的王者)。
因此,每次检索文件夹/文件的尝试都必须从Drive root开始,枚举它的子项。例如,在新的Google云端硬盘API(GDAA)中,您将使用其中之一。
DriveFolder.listChildren(gac).await()
DriveFolder.queryChildren(gac, query).await();
其中'gac'是GoogleApiClient实例,'query'来自 Query.Builder()... 。
当你继续前进时,你正在获取对象的元数据,给你关于对象的完整信息(mime,status,title,type,...),你处理重复(是的,你可以拥有多个文件夹/文件)相同的名称 - 但唯一的ID)。当您点击文件夹时,开始另一次迭代。在此过程中,您可以使用文件夹'/ files'唯一的RESOURCE ID'(您在文件/文件夹的http地址中看到的字符串)来缓存结构。
目前,Java / Android世界中有两种不同的API,旧的RESTFul API和the new GDAA(我不知道它如何应用于iOS)。我有some code here,在树下显示递归(buildTree()),以及处理(findFirst())中的重复文件/文件夹名称的代码。但不幸的是,它是GDAA风格的Java,所以它对你的案例可能不是很有用。
还有一件值得一提的是,您可以“列出”或“查询”只有一个文件夹级别的子级(不是它的子文件夹),或者您可以在当前范围内全局查询(但不能列出)所有对象(FILE)范围仅限于GDAA,RESTful中的许多范围。)