2016-04-02 5 views
0

私はJava開発者です。私はGoogleアプリケーションclient_idとclient_secrectを使用してアプリケーションにGoogleドライブを統合しています。 このclient_idに基づいて、ユーザーのアクセストークンを取得しました。アクセストークンを取得した後、次のコードを使用してドライブからファイルとフォルダを取得しました。javaを使用してGoogleドライブからフルファイルパスを取得する方法

HttpTransport httpTransport = new NetHttpTransport(); 
JacksonFactory jsonFactory = new JacksonFactory(); 
System.out.println(inventoryIntegrationConfig.getAccessToken()); 

GoogleCredential credential = new GoogleCredential().setAccessToken(inventoryIntegrationConfig.getAccessToken()); 

Drive service = new Drive.Builder(httpTransport, jsonFactory, null) 
.setApplicationName("Akoonu") 
.setHttpRequestInitializer(credential).build(); 

Files.List request = service.files().list(); 
. 
. 
. 
. 

私は正常にファイルやフォルダのダウンロードURLとファイル名を受け取った.But私はBaseFolder/SubFolder1/Subofsubfolder/TESTFILE.TXT例 のためのGoogle drive.Likeの完全なファイルパスを取得することはできません。 ここに私の期待される出力はパスです:BaseFolder/SubFolder1/Subofsubfolder/

私はどのドライブクラスからも完全なファイルパスを取得できません。完全なファイルパスを取得する方法を教えてください。 完全なファイルパスを取得するにはどの方法を使用する必要がありますか?

ここをクリックしてください。

答えて

0

従来のファイルシステムとは異なり、Googleドライブには完全なフォルダパスや絶対ファイルの場所という概念はありません。ファイルは0個以上のフォルダに配置できます。アジャイルはオーナーの「マイドライブ」と直接関連していない可能性があります。

質問に答えるには、問題のファイルをfiles.get()する必要があります。次に、parentsにリストされている各フォルダIDに対して同じfiles.get()を実行します。 My Driveのルートフォルダまたは保護者がいないフォルダに移動し、ファイルパスがあるまで、親を取得し続けます。

フォルダ構造の複雑さによっては、ファイル/フォルダIDと親を取得するユーザーに対してfiles.list()を実行する方が高速で効率的です。取得リクエストよりも時間がかかりますが、一度完了すると、フォルダパスを判断するために必要なすべてのデータを取得する必要があります。

0

完全なファイルパスを呼び出す/取得する方法はありません。最初に、ファイルの絶対パスに関する詳細をクリアします。フォルダやパスを考えずに、ラベル(親とコレクション)のような用語を考えてみてください。

両親

ファイルが含まれている親フォルダのIDを。 作成要求の一部として指定されていない場合、ファイルは[マイドライブ]フォルダに直接配置されます。更新リクエストは、addParentsおよびremoveParentsパラメータを使用して値を変更する必要があります。

ファイルに複数の親がある場合、各親は1つ以上の親/ラベル/コレクションを持つことができます。 "ファイルパス"を取得するには、親の親を再帰的に取得する必要があります。 pinoyyidが答えた以下のSOチケットによれば、「ファイルには複数の親があり、それぞれが複数の親を持つことができるので、ファイルに複数のパスがあることを覚えておいてください。

Googleドライブを使用すると、パス/フォルダという用語は無視されますが、単にファイルのプロパティに過ぎません。

Apps Scriptは、ファイルの親/コレクションを取得する際の回避策を作成しました。詳細はSO questionを参照してください。私はそれが助けて欲しい

関連する問題