2016-04-30 22 views
0

Googleドライブからフォルダ、サブフォルダ、ファイルを読み込み、ファイルシステム内の空のファイル(それぞれ必要なもののみ)のそれぞれの階層(フォルダ、サブフォルダ、ファイル)を作成する必要がありますファイルのデータではなく名前を保持する)。私はすべてをダウンロードしたが、空のファイルだけで、ファイル全体をダウンロードする必要はありません。JavaのGoogleドライブのファイル階層を抽出する

私の目標は、ファイルシステム(フォルダ、サブフォルダ、ファイル)を入力として使用する他のプログラムで、完全な階層をローカルで使用することです。

私の問題は、GoogleドライブAPIがID(ラベル)に基づいているようで、階層/パスがないようです。私はすべてのファイルをリストし、親を持っているものを見つけて、自分自身全体の階層を作成するか(素晴らしいアイデアのようには思えません)、ルートファイルから始めてcom.google.api.services.drive.Drive.Childrenを使って、親としてルートを持っている(私はそれに依存しているとは思えないので、私はそれに問題があった)。

解決策がすでに存在するかどうかを知っていますか? Googleドライブのドキュメントでこれに関連するものが見つからないようです(exemplesは正しいMaven依存関係を持つことはほとんどありません)。

お時間をいただきありがとうございます。

例:

file1.parent is folder1 
file2.parent is root 
folder1.parent is root 

Googleドライブでは、ローカルファイルシステム上で、次のように表示されます(それが一時フォルダにすることができます)。

root/ 
    folder1/ 
     file1 
    file2 

答えて

2

クイックスタートガイドfor java - https://developers.google.com/drive/v3/web/quickstart/java

グラデルを使用しています。あなたが好きな人は、以下の依存関係を使用してください:

<dependencies> 
    <dependency> 
     <groupId>com.google.apis</groupId> 
     <artifactId>google-api-services-drive</artifactId> 
     <version>v3-rev22-1.21.0</version> 
    </dependency> 

    <dependency> 
     <groupId>com.google.oauth-client</groupId> 
     <artifactId>google-oauth-client</artifactId> 
     <version>1.21.0</version> 
    </dependency> 

    <dependency> 
     <groupId>com.google.oauth-client</groupId> 
     <artifactId>google-oauth-client-jetty</artifactId> 
     <version>1.21.0</version> 
    </dependency> 

</dependencies> 

これはあなたに実用的な例を与えます(実行に10分かかります)。さて、階層の問題に行きましょう。 files.listメソッドを使用し、検索クエリを指定する必要があります。サポートされているクエリパラメータのリストは、https://developers.google.com/drive/v3/web/search-parametersです。

だから、あなたは、このようなルートから開始します。

FileList result = service.files().list() 
      .setQ("'root' in parents and trashed = false") 
      .setPageSize(100) 
      .setFields("nextPageToken, files(id, name, mimeType)") 
      .execute(); 

そして、再帰的に代わり、クエリ内の「ルート」のフォルダIDを使用して階層を構築。指定されたファイルリソースがmimeTypeプロパティ(フォルダのMIMEタイプはapplication/vnd.google-apps.folder)であることを確認することで、特定のファイルリソースがフォルダかファイルかを判断できます。

1

ドライブへの呼び出しを再帰的に実行しないでください。 を使用してすべてのフォルダをフェッチし、各フォルダの親情報を使用してメモリ内の階層を構築することをお勧めします。

Googleドライブは階層を強制しないので、ファイルには複数の親があり、祖父母は子供になることもあります。

例えば

folderA_ 
folderB_\ 
     \__folderC 
        \__folderB 

...法的

0

は、ユーザーのドライブ内のファイルを一覧表示または再編成に関連した必要性を持っているので、説明したようにあなたは完全なドライブのスコープを要求するなどの利用可能なスコープを使用することを検討する必要があるかもしれないです

(https://www.googleapis.com/auth/drive) 
Choose Auth Scopes

リクエスト形式で210

一方、Files: listで指定された適用可能なすべてのパラメータでHTTPリクエストを送信して、ファイルのリストを取得することもできます。

関連する問題