Dropbox SDKを使ってみよう(3-1.認証情報の利用/アップロード)


Dropbox SDKを使ってみよう(2.アカウント設定(認証))ではアカウントを使用するための認証情報を取得する方法を紹介しました。

今回はいよいよ実際にファイルのアップロードを行う方法を紹介します。

詳細は以下から。

認証情報の利用方法

アップロードなどの操作を行う場合はDropbox SDKを使ってみよう(2.アカウント設定(認証))にて取得した認証情報を使用して、誰のアカウントでどのアプリとして操作を行うのかをDropboxAPIクラスのオブジェクトに設定する必要があります。

下記は認証情報を使用してDropboxAPIクラスのオブジェクトにアプリとユーザーを設定するためのサンプルコードです。
コード中の”mDBApi”変数は以下のようにフィールドとして宣言されているDropboxAPIクラス変数です。

FileActionMenuActivity.java

private DropboxAPI<AndroidAuthSession> mDBApi;

FileActionMenuActivity.java

// 認証情報取得
SharedPreferences sp = this.getSharedPreferences("drop_box_auth", Context.MODE_PRIVATE);
String userKey = sp.getString("access_tokem", "");
String userSecret = sp.getString("access_token_secret", "");

// APIアクセス用オブジェクト作成
AppKeyPair access = new AppKeyPair(DropBoxAuthActivity.APP_KEY,
        DropBoxAuthActivity.APP_SECRET);
AndroidAuthSession session = new AndroidAuthSession(access,
        DropBoxAuthActivity.ACCESS_TYPE);
mDBApi = new DropboxAPI<AndroidAuthSession>(session);
AccessTokenPair pair = new AccessTokenPair(userKey, userSecret);
mDBApi.getSession().setAccessTokenPair(pair);

7、8行目ではアプリケーションの認証情報をペアにして管理するAppKeyPairクラスのオブジェクトを作成しています。

9、10行目では認証情報とアプリケーションのアクセスタイプを関連付けてアプリケーションの認証情報を管理するAndroidAuthSessionクラスのオブジェクトを作成しています。

11行目ではAndroidAuthSessionクラスのオブジェクトを使用して、DropboxAPIクラスのオブジェクトを作成しています。

12行目ではユーザーの認証情報をペアとして管理するAccessTokenPairクラスのオブジェクトを作成しています。
AccessTokenPairクラスのコンストラクターに第二回目の記事で取得した認証情報を使用します。
第一引数にはtoken keyを第二引数にはtoken secretを指定します。

13行目ではAndroidAuthSessionクラスのsetAccessTokenPairメソッドを使用してDropboxAPIクラスのオブジェクトにユーザーの認証情報を関連付けています。

以降はこのDropboxAPIクラスのオブジェクトクラスを使用してファイルに対する操作を行います。

ファイルのアップロード

Dropboxにファイルをアップロードするには、DropboxAPIクラスのputFileメソッドを使用します。

putFileメソッドを実行するには以下の引数が必要になります。

[table “191” not found /]

以下はassetsフォルダに入っている“test.txt”というファイルをDropboxにアップロードするサンプルです。

FileActionMenuActivity.java

AssetManager am = this.getAssets();
try {
    final InputStream in = am.open("test.txt");
    in.read(mUpData);
    final ByteArrayInputStream bin = new ByteArrayInputStream(mUpData);
    new Thread(new Runnable() {

        public void run() {
            try {
                final Entry entry = mDBApi
                        .putFile("/test2.txt", bin, 100, null, null);
                mHandler.post(new Runnable() {

                    public void run() {
                        Toast.makeText(FileActionMenuActivity.this,
                                entry.path, Toast.LENGTH_LONG).show();
                    }
                });
            } catch (final DropboxException e) {
                  mHandler.post(new Runnable() {

                      public void run() {
                          Toast.makeText(FileActionMenuActivity.this,
                                  "ファイルのアップロードに失敗しました", Toast.LENGTH_LONG).show();
                          Log.e(FileActionMenuActivity.this.getPackageName(),
                                  e.toString());

                      }
                });

            }

        }
    }).start();

} catch (IOException e) {
    Toast.makeText(FileActionMenuActivity.this,
            "ファイルのアップロードに失敗しました", Toast.LENGTH_LONG).show();
            Log.e(this.getPackageName(), e.toString());
    }
}

3〜5行目ではアップロードするファイルをbyte型の配列として読み込み、読み込んだbyte型の配列からputFileメソッドの第二引数に指定するための“ByteArrayInputStream”クラスのオブジェクトを作成しています。
putFileメソッドの第二引数用にはアップロードするファイルの読み込みストリームを直接入れるべきだと考えると思いますが、ファイル読み込み時のストリームを引数として渡すとSDK内でエラーが発生するため、こういうまわりくどい実装をしています。

10、11行目ではputFileメソッドを使用してファイルをアップロードしています。
戻り値として渡されるEntryクラスオブジェクトはアップロードされたファイルの情報(ファイル名やファイルパスなど)を内包しています。
アップロードされたファイルの情報を使用する場合はこの戻り値を使用します。

次回はファイルの検索方法、ファイルのダウンロード方法、ファイルのリビジョン管理方法について解説します。

One Comment