この記事ではKii Cloud の Android SDK を使ったファイルアップロードについてご紹介します。が、先に「Kii Cloud JavaScript SDKを使ってデータを保存する」を見ていただいて、Kii Cloud 上でのデータ保存について知っていただくとより分かりやすいかと思います。
Android SDKの利用準備
ファイルアップロードの話の前にAndroid SDK の利用方法について軽く触れておきます。
Javascript SDKの準備編と同様に新規アプリケーションの作成を行い、
Application ID と Application Key と KiiCloudStorageSDK-xxx.jarファイルを入手します。
SDKの初期化
KiiCloudStorageSDK-xxx.jarファイルはlibsフォルダに配置し、
アプリケーションクラスに以下のコードを実装し、起動時に初期化するようにします。
public class MobileApp extends Application { @Overrideprotected void onCreate() { // APPID と APPKEY の項目は、 開発者ポータルにて取得した Application ID と Application Key を設定 Kii.initialize("___APPID___", "___APPKEY___", Site.JP); } } |
また、マニフェストファイルでは以下のようなパーミッション設定になります。
<uses-permission android: name="android.permission.INTERNET" /> <uses-permission android:name="android.permission. WRITE_EXTERNAL_STORAGE" /> |
ファイルのアップロード
Kii Cloud でのファイルは、Object に紐付く ObjectBody として管理することになります。
Object については「Kii Cloud JavaScript SDKを使ってデータを保存する」をご参照ください。簡単に説明すると、Object は Key-Value により構成されるJSON オブジェクトで、その Objectの入れ物である Bucket ごとに管理されます。下記の図は Javascript SDKの準備編でBucket/Objectの概要を説明した図です。
ObjectBody はこれら Object と紐付けてファイル管理する為の機能で、ファイルアップロードの方法としては2種類用意されています。
シンプルなアップロード
この方法を利用したアップロードは、アップロード状況の取得や、アップロード完了の取得は可能ですが、途中キャンセルは実行できません。ネットワーク切断などでアップロードが中断した場合、最初からアップロードし直すことになります。よって、安定したネットワーク下での小さなサイズのファイルアップロードに向いています。
中断・再開が可能なアップロード
この方法を利用したアップロードは、任意のタイミングでアップロードの中断・再開・取り消しが可能です。ネットワーク切断などでアップロードが中断した場合、中断した箇所からのアップロードが可能になります。よって、不安定なネットワーク下での大きなサイズのファイルアップロードに向いています。
以下の図は、中断・再開可能なアップロードの仕組みを簡単な図で表したものです。

- ファイルを紐付けるObjectを生成する
- KiiObject に転送ファイルを指定すると…
- KiiUploader を生成されるので、転送開始する
- 転送中の KiiUploader はバケツ内の KiiRTransferManager で管理される
- KiiUploader は、転送状態を持つ KiiRTransferInfo を保持している
- 転送中の KiiUploader に対して、中断・再開・停止のコントロールができる
- 転送完了・停止した KiiUploader は、KiiRTransferManager の管理から外れる
- 転送完了したファイルは、ObjectBody として管理される
中断・再開可能なアップロードの開始
// アプリスコープのバケツ "mydata"に属するObjectを作成 KiiObject object = Kii.bucket("mydata"). object(); object.set("title", "MyImg"); // File localFile: アップロード対象ファイル // Objectに転送ファイルを指定して、 KiiUploader を生成 KiiUploader uploader = object.uploader(context, localFile); // アップロード開始uploader.transferAsync(new KiiRTransferCallback() { // 開始を検知 public void onStart(KiiRTransfer operator) { // KiiRTransfer operator: KiiUploaderはKiiRTransferManagerに転送完了するまで管理される} // 転送状況の検知public void onProgress(KiiRTransfer operator, long completedInBytes, long totalSizeinBytes) { } // アップロード完了 public void onTransferCompleted(KiiRTransfer operator, Exception e) {if(e != null) { //中断実行すると、 SuspendedExceptionが発行される}}}); |
アップロードの中断
// バケツ"mydata"の管理下にある KiiRTransferManagerを取得 KiiBucket bucket = Kii.bucket("mydata"); KiiRTransferManager manager = bucket.getTransferManager(); // KiiRTransferManagerでアップロード中の KiiUploader一覧を取得 List uploaders = null;try {uploaders = manager.listUploadEntries(context); } catch (StateStoreAccessException e) { } if(uploaders.size() > 0) { // KiiUploader一覧から中断対象を選択 KiiUploader uploader = uploaders.get(0); // 中断実行uploader.suspendAsync (new KiiRTransferCallback() { // 中断完了 public void onSuspendCompleted(KiiRTransfer operator, Exception e) { // 中断完了後も、KiiUploader は KiiRTransferManager の管理下にいる}}); } |
アップロードの終了
// 中断と同じ方法で終了対象の KiiUploader を取得する // 終了実行uploader.terminateAsync(new KiiRTransferCallback() { // 終了完了 public void onTerminateCompleted(KiiRTransfer operator, Exception e) { // 終了完了後、 KiiUploader は KiiRTransferManagerの管理下から外れる}}); |
以上のように、Kii Cloud 上でのファイルアップロードは Object に紐付く ObjectBody として行います。また、アップロードの方法としては2種類あり、その内の中断・再開可能な方法は、転送完了(終了)するまで KiiRTransferManager にて管理されます。この方法でアップロードしていると、転送途中にプロセスが停止しても転送が保持されるので、次にプロセス起動した際に途中から再開できます。次回は、アップロードしたファイルを公開する機能について紹介します。