LoginSignup
4
4

More than 5 years have passed since last update.

[Java]GoogleDriveAPIで指定ディレクトリにファイルをアップロードする

Posted at

前回の記事で紹介したGoogleDriveAPIのサンプルコードは、ルートディレクトリ直下にアップロードする実装になっている。
しかし、ファイルをアップロードする際は任意のディレクトリにアップロードしたいもの。
指定ディレクトリにアップロードするためには、以下の手順で行える。

指定のディレクトリを取得

効率のよい取得方法が分からなかったので、愚直にルートディレクトリからたどった。
ルートディレクトリ直下のファイル、ディレクトリ一覧は以下のようにして取得できる

com.google.api.services.drive.Drive drive;
...
FileList fileList = drive.files().list().execute();
for(File file : fileList.getItems){
  // IDとファイル名
  System.out.println(file.getId() + " " + file.getTitle());
}

指定のディレクトリ以下を取得する場合、以下のようにsetQメソッドで親ディレクトリのIDを条件に追加する。

FileList fileList =  drive.files().list().setQ( "'" + parent.getId() + "' in parents").execute();

アップロードするファイルの親ディレクトリを指定

目的のディレクトリのFileオブジェクトを取得できたらば、ファイルアップロード時にFile#setParentsメソッドで親ディレクトリを指定すればよい。

File uploadFileMetadata = new File();
...
uploadFileMetadata.setParents( Arrays.asList( new ParentReference().setId( parent.getId())));

はまりどころ

  • デフォルトの設定だとGoogleDriveAPIで作成したファイル、ディレクトリしか参照することができない
    ブラウザからアップロード先のディレクトリを作っても見えなくてはまった
  • デフォルトの検索条件だとゴミ箱にあるファイル、ディレクトリもヒットしてしまう
    ゴミ箱のファイルを除外するにはsetQメソッドでtrashed = falseを追加する必要がある。親ディレクトリの指定と合わせる場合は以下のようにandで条件を結合する。
setQ( "trashed = false and '" + parent.getId() + "' in parents")

実装されたコード

指定ディレクトリへのアップロードを行うCLIツール。
https://github.com/tsyki/backup-to-google-drive

GoogleDriveUploaderのgetDir, uploadFileで上記処理を実装してある。

参考URL

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4