2014-03-19 109 views
0

我正在考慮在我寫的iOS應用程序中添加對Google Drive的支持。這不是我的問題 - 關於如何做到這一點,有很多體面的文檔。谷歌驅動器sdk和文件夾的處理

我的問題是這個應用程序的數據源是一個文件夾。這個文件夾可以包含數十個(嵌套的)子文件夾和數百個文件。

當我搜索Google Drive的文檔時,有大量關於單個文件處理的信息;然而,關於文件夾處理的信息很少(除了文件夾似乎具有唯一的MIME類型)。

因此,假設我可以運行一個查詢來識別引用我感興趣的文件夾(數據源)的GTLDriveFile,我需要將該文件夾的全部內容 - 完整的分層組織 - 下載到我的應用程序的沙箱中。順便說一句,這個應用程序主要用於平板電腦(iPad)。

我如何做到這一點?

感謝,

回答

1

的谷歌驅動器型號是內部的指針向家長和孩子一個平面模型,投射成一個傳統的基於樹的模型需要慎重考慮任何實現。

由於我不在iOS上工作,我會盡量保持它的一般性,指的是JAVA代碼片段;它應該很容易翻譯成任何語言(相信iOS有一些'C'味道的國王)。

因此,每次檢索文件夾/文件的嘗試都必須先從Drive根開始,然後枚舉它的子項。例如,在新的Google Drive API(GDAA)中,您也可以使用。

DriveFolder.listChildren(gac).await() 
DriveFolder.queryChildren(gac, query).await(); 

其中 'GAC' 是GoogleApiClient實例和 '查詢' 來自Query.Builder()...。當你繼續前進的時候,你會得到對象的元數據,給你關於對象的全部信息(mime,status,title,type,...),你處理重複項(是的,你可以有多個文件夾/文件具有相同的名稱 - 但唯一的ID)。當你點擊文件夾時,開始另一個迭代。在這個過程中,您可以使用文件夾'/ files'唯一的RESOURCE ID'(您在文件/文件夾的http地址中看到的字符串)來緩存結構。

目前Java/Android世界有兩種不同的API,舊的RESTFul APIthe new GDAA(我不知道它如何適用於iOS)。我有some code here,顯示樹下的遞歸(buildTree()),以及處理(findFirst())中的重複文件/文件夾名稱的代碼。但不幸的是它是GDAA風格下的Java,所以它可能對你的情況不是很有用。

還有一件值得一提的是,您可以'列出'或'查詢'只有一個文件夾級別的孩子(而不是子文件夾),或者您可以查詢(但不是列出)當前範圍內的全部對象FILE僅在GDAA中有作用域,在RESTful中有許多作用域)。

+0

謝謝 - 這正是我一直在尋找的。我懷疑Google Drive模型是某種帶有指針的扁平事物,這部分解釋了爲什麼使用文件夾很有挑戰性。 java代碼也很有用,因爲我的白天工作是java(我只能在晚上和週末做iOS,直到我的公司認爲它很有用)。無論如何 - 再次感謝。 – user3435771