Box Java SDK を利用した Box 連携
はじめに
本CookBookでは「intra-mart Accel Platform」で同梱している Box Java SDK を直接利用する方法をご紹介します。
尚、「intra-mart Accel Platform」は Boxエコシステムソリューションに登録されているため、以下(1~3)からのAPIコールは非課金対象ですが、Box Java SDK を直接利用した独自のJava実装の場合は課金対象になりますのでご注意ください。
非課金対象:
本Cookbookでご紹介しているサンプル実装を使用したAPIコールにおいても、料金が発生する場合がありますのでご注意ください。
課金を極力抑制したい場合は、ご予算と必要なユースケースに合わせて限定的な直接利用をご検討ください。
主要ポイント
以下の方法で BoxAPIConnection を生成することで intra-mart Accel Platform から Box に接続できます。
- 以下の API を利用して config.json のバイト配列を取得
- バイト配列を StringReader に変換し、以下の API で BoxConfig を生成
- 以下の API を利用して BoxConfig から BoxAPIConnection を取得
完成イメージ
JavaEE開発モデルを用いて、ジョブスケジューラにおけるジョブのサンプル実装を行っています。
ジョブの作成方法や実行方法については、CookBook 「ジョブを作成して定期実行する」も参考にしてください。
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.StringReader;
import com.box.sdk.BoxAPIConnection;
import com.box.sdk.BoxConfig;
import com.box.sdk.BoxDeveloperEditionAPIConnection;
import com.box.sdk.BoxFile;
import com.box.sdk.BoxFileVersion;
import com.box.sdk.BoxFolder;
import jp.co.intra_mart.foundation.box.config.repository.ClientConfigRepositoryFactory;
import jp.co.intra_mart.foundation.job_scheduler.Job;
import jp.co.intra_mart.foundation.job_scheduler.JobResult;
import jp.co.intra_mart.foundation.job_scheduler.exception.JobExecuteException;
public class BoxSampleJob implements Job {
@Override
public JobResult execute() throws JobExecuteException {
try {
// BoxConfigを読み込み("standard"を指定)
final byte[] clientConfig = ClientConfigRepositoryFactory.getRepository().getClientConfig("standard");
final BoxConfig boxConfig = BoxConfig.readFrom(new StringReader(new String(clientConfig)));
// BoxAPIConnectionを作成
final BoxAPIConnection boxApi = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(boxConfig);
////////////////////////////////////////////////////////
// 以下、APIを使用して任意の操作を実装
// ルートフォルダ("0"を指定)
final String rootFolderId = "0";
final BoxFolder rootFolder = new BoxFolder(boxApi, rootFolderId);
// フォルダ作成(任意のフォルダ名を指定)
final BoxFolder.Info sampleFolderInfo = rootFolder.createFolder("sample_folder");
// 作成したフォルダにファイルアップロード
final File fooFileData = new File("c:/tmp/foo_data.txt");
String fileID = "";
try (InputStream inputStream = new FileInputStream(fooFileData)) {
final BoxFile.Info fileInfo = new BoxFolder(boxApi, sampleFolderInfo.getID()).uploadFile(inputStream, "sample.txt");
fileID = fileInfo.getID();
}
// アップロードしたファイルを更新
final File barFileData = new File("c:/tmp/bar_data.txt");
try (InputStream inputStream = new FileInputStream(barFileData)) {
new BoxFile(boxApi, fileID).uploadNewVersion(inputStream);
}
// 更新したファイルのバージョン情報取得
for (final BoxFileVersion version : new BoxFile(boxApi, fileID).getVersions())
System.out.println("Version: " + version.getVersionID());
// フォルダを削除(true:フォルダ内の全コンテンツも削除)
new BoxFolder(boxApi, sampleFolderInfo.getID()).delete(true);
////////////////////////////////////////////////////////
} catch (final Exception e) {
throw new JobExecuteException("予期しないエラーが発生しました。", e);
}
return JobResult.success("ジョブが正常に実行されました。");
}
}
※ Box Java SDK が提供する API の詳細については Box 社のドキュメントをご参照ください
※ intra-mart Accel Platform 2024 Spring 時点で同梱している Box Java SDK のバージョンは 4.0.0 です
レシピ
- config.json 取得
- StringReader 変換
- BoxConfig 生成
- BoxAPIConnection 取得
- Box Java SDK APIを利用した任意の操作(ファイルアップロードなど)
1. config.json 取得
以下のメソッドを使用して、Box連携セットアップ時に intra-mart Accel Platform にアップロードした設定ファイル(config.json)の内容をバイト配列で取得します。clientId には "standard" を指定してください。
final byte[] clientConfig = ClientConfigRepositoryFactory.getRepository().getClientConfig("standard");
2. StringReader 変換
バイト配列を StringReader に変換します。
new StringReader(new String(clientConfig))
3. BoxConfig 生成
BoxConfig.readFromメソッドを使用して、BoxConfig を作成します。
final BoxConfig boxConfig = BoxConfig.readFrom(new StringReader(new String(clientConfig)));
4. BoxAPIConnection 取得
BoxConfig から BoxAPIConnection を取得します。
final BoxAPIConnection boxApi = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(boxConfig);
5. Box Java SDK APIを利用した任意の操作(ファイルアップロードなど)
BoxAPIConnectionを取得した後は、Box Java SDK APIを利用した任意の操作が可能になります。
以下はフォルダ作成、ファイルアップロードを行うコードです。
final String rootFolderId = "0";
final BoxFolder rootFolder = new BoxFolder(boxApi, rootFolderId);
final BoxFolder.Info sampleFolderInfo = rootFolder.createFolder("sample_folder");
final File fooFileData = new File("c:/tmp/foo_data.txt");
try (InputStream inputStream = new FileInputStream(fooFileData)) {
final BoxFile.Info fileInfo = new BoxFolder(boxApi, sampleFolderInfo.getID()).uploadFile(inputStream, "sample.txt");
}
その他、完成イメージのサンプルコード、Box社の API Reference に記載のサンプルコードなども参考にしてください。
まとめ
本CookBookでは、Box Java SDK を利用して Box に接続、ファイルアップロードなどを行う方法をご紹介しました。
Box Java SDK も組み合わせることで、お客様の用途の幅が広がることを期待しています。是非ご活用ください。