概要
BoxのWeb APIを使い、会社の業務システムからBoxのファイルを操作したいと思っています。
システム内で生成したファイルを、Boxにアップロードするイメージです。
調べてみると、各種プログラム言語のSDKがあるようなので、今回はJava SDKを使ってみようと思います。
認証をクリアする
APIを使うにはまずは認証をクリアしなければいけません。
BoxのAPIにはいくつかの認証方式が用意されていますが、今回のユースケースではJWT認証が適切だと思います。
他の認証方式については、公式ドキュメントをチェックしてください。
プログラムを書く前に、まずは認証をクリアするためにアプリケーションをBoxに登録します。
アプリケーションを登録する
基本的には下記手順の通りでOKです。
JWTを使用した設定
公開キーと秘密キーのペアのセクションでは、今回は「キーペアの生成」を選択します。
手順通り「公開/秘密キーペアを生成」を押すと、Jsonファイルがダウンロードされるので、Javaプロジェクトのクラスパスに入れておきましょう。
Java SDKを使う
インストール
SDKは、Mavenのセントラルリポジトリにありますので、簡単に利用する事ができます。
<dependency>
<groupId>com.box</groupId>
<artifactId>box-java-sdk</artifactId>
<version>2.48.0</version>
</dependency>
SDKをの使い方をざっと学習するには↓を見るのが良いでしょう。
SDK Overview
以下、簡単な操作を試してみます。
セッションを接続する
先程クラスパスに入れておいたJsonファイルを読み込む事で、↓のコードで認証を済ませる事ができます。
Reader reader = new InputStreamReader(BoxSdkTest.class.getClassLoader().getResourceAsStream("config.json"));
BoxConfig boxConfig = BoxConfig.readFrom(reader);
BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(boxConfig);
ユーザ情報を表示する
認証を済ませたものの、今自分がログインしているユーザを知る必要があります。
Boxのファイルやフォルダは、権限のあるユーザでないと操作する事ができないからです。
下記のコードでユーザ名を表示してみましょう。
BoxUser user = BoxUser.getCurrentUser(api);
BoxUser.Info userInfo = user.getInfo();
System.out.println("userInfo : "+ userInfo.getName());
コンソールには、事前に登録したアプリケーション名が表示されたはずです。
登録したアプリケーション自身のユーザとしてログインしている状態のようです。
このユーザの事を、Boxでは「サービスアカウント」と呼んでいます。
Box APIで使用できるユーザには、いくつかの種類がありますが、今回はこのサービスアカウントを使っていく事にします。
フォルダ情報を表示する
サービスアカウントは、普通のユーザと同じように、ファイルやフォルダにコラボレータとして追加する事ができます。
「一般構成」の「サービスアカウント情報」に、サービスアカウントのメールアドレスが表示されているので、これを目的のフォルダにコラボレータとして追加してみます。
下記のようなコードで、このフォルダの情報を表示する事ができます。
BoxFolder folder = new BoxFolder(api, "***********");
BoxFolder.Info info = folder.getInfo();
System.out.format("[%s] %s\n", info.getID(), info.getName());
BoxFolder
のコンストラクタに渡している***********
には、フォルダIDを指定します。
フォルダIDは、目的のフォルダのURLに含まれています。https://app.box.com/folder/***********
という感じになっているので、folder
の次にある数字を入れてください。
ファイルをアップロードする
このフォルダに、ファイルをアップロードしてみましょう。
FileInputStream input = new FileInputStream("hoge.pdf");
BoxFile.Info newFileInfo = folder.uploadFile(input, "test.pdf");
System.out.println("https://app.box.com/file/" + newFileInfo.getID());
これで、ローカルのhoge.pdf
がtest.pdf
として目的のフォルダにアップロードされ、コンソールには、そのURLが表示されます。