このトピックでは、Object Storage Service (OSS) SDK for Androidを使用して、バケットの作成、オブジェクトのアップロード、オブジェクトのダウンロードなどの日常的な操作を実行する方法について説明します。
前提条件
OSS SDK for Androidがインストールされています。 詳細については、「インストール」をご参照ください。
サンプルプロジェクト
次の方法を使用して、サンプルプロジェクトを試すことができます。
ローカルファイルのアップロード、オブジェクトのダウンロード、再開可能なアップロードの実行、コールバックの設定のコード例を含むサンプルディレクトリを表示します。 詳細については、『GitHub』をご参照ください。
git cloneコマンドを実行して、プロジェクトを複製します。
プロジェクトを実行する前に、Configクラスを設定する必要があります。 次のサンプルコードは、Configクラスの設定方法の例を示しています。
public class Config {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
public static final String OSS_ENDPOINT = "https://oss-cn-hangzhou.aliyuncs.com";
// コールバックURLを指定します。
public static final String OSS_CALLBACK_URL = "https://oss-demo.aliyuncs.com:23450";
// Security Token Service (STS) 認証サーバーのURLを指定します。
// プロジェクトのsts_local_serverディレクトリでローカル認証スクリプトを実行して、ローカルSTS認証サーバーを起動することもできます。
public static final String STS_SERVER_URL = "http:// ****/sts/getsts";
public static final String BUCKET_NAME = "yourBucketName";
public static final String OSS_ACCESS_KEY_ID = "yourAccessKeyId";;
public static final String OSS_ACCESS_KEY_SECRET = "yourAccessKeySecret";
public static final int DOWNLOAD_SUC = 1;
public static final int DOWNLOAD_Fail = 2;
public static final int UPLOAD_SUC = 3;
public static final int UPLOAD_Fail = 4;
public static final int UPLOAD_PROGRESS = 5;
パブリックスタティックfinal int LIST_SUC = 6;
public static final int HEAD_SUC = 7;
public static final int RESUMABLE_SUC = 8;
public static final int SIGN_SUC = 9;
public static final int BUCKET_SUC = 10;
public static final int GET_STS_SUC = 11;
public static final int MULTIPART_SUC = 12;
public static final int STS_TOKEN_SUC = 13;
public static final int FAIL = 9999;
public static final int REQUESTCODE_AUTH = 10111;
public static final int REQUESTCODE_LOCALPHOTOS = 10112;
}
STS認証サーバーのURLを設定する方法の詳細については、「モバイルアプリの直接データ転送の設定」をご参照ください。
sts_local_serverディレクトリのスクリプトの詳細については、『GitHub』をご参照ください。
AccessKeyペアの作成方法の詳細については、「AccessKeyペアの取得」をご参照ください。
バケットを作成する
バケットは OSS のグローバルネームスペースです。 バケットは、オブジェクトを格納するために使用されるコンテナです。 次のサンプルコードは、バケットの作成方法の例を示しています。
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
String endpoint = "yourEndpoint";
// STSから取得した一時的なAccessKeyペアを指定します。
文字列accessKeyId = "yourAccessKeyId";
文字列accessKeySecret = "yourAccessKeySecret";
// STSから取得したセキュリティトークンを指定します。
文字列securityToken = "yourSecurityToken";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId、accessKeySecret、securityToken);
// OSSClientインスタンスを作成します。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
// バケットの名前を指定します。
CreateBucketRequest createBucketRequest=新しいCreateBucketRequest("bucketName");
// バケットのアクセス制御リスト (ACL) をpublic-readに設定します。 デフォルトのバケットACLはprivateです。
createBucketRequest.setBucketACL(CannedAccessControlList.PublicRead);
// バケットが配置されているリージョンを指定します。
createBucketRequest.setLocationConstraint("oss-cn-hangzhou");
OSSAsyncTask createTask = oss.asyncCreateBucket(createBucketRequest, new OSSCompletedCallback<CreateBucketRequest, CreateBucketResult>() {
@オーバーライド
public void onSuccess(CreateBucketRequestリクエスト、CreateBucketResult結果) {
Log.d("locationConstraint", request.getLocationConstraint());
}
@オーバーライド
public void onFailure(CreateBucketRequest request, ClientException clientException, ServiceException serviceException) {
// リクエスト例外を処理します。
if (clientException != null) {
// ネットワーク例外などのクライアント例外を処理します。
clientException.printStackTrace();
}
if (serviceException != null) {
// サービス例外を処理します。
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
オブジェクトのアップロード
次のサンプルコードは、ローカルファイルをOSSにアップロードする方法の例を示しています。
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
String endpoint = "yourEndpoint";
// STSから取得した一時的なAccessKeyペアを指定します。
文字列accessKeyId = "yourAccessKeyId";
文字列accessKeySecret = "yourAccessKeySecret";
// STSから取得したセキュリティトークンを指定します。
文字列securityToken = "yourSecurityToken";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId、accessKeySecret、securityToken);
// OSSClientインスタンスを作成します。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
// ファイルのアップロード要求を作成します。
PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectName>", "<uploadFilePath>");
// ローカルファイルを非同期モードでアップロードするときは、プログレスコールバックを設定できます。
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
@オーバーライド
public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
Log.d("PutObject", "currentSize: " + currentSize + "totalSize: " + totalSize);
}
});
OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
@オーバーライド
public void onSuccess(PutObjectRequestリクエスト, PutObjectResult結果) {
Log.d("PutObject", "UploadSuccess");
Log.d("ETag", result.getETag());
Log.d("RequestId", result.getRequestId());
}
@オーバーライド
public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// リクエスト例外を処理します。
if (clientExcepion != null) {
// ネットワーク例外などのクライアント例外を処理します。
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// サービス例外を処理します。
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
// task.ca ncel(); // ダウンロードタスクをキャンセルできます。
// task.waitUntilFinished(); // アップロードが完了するまで待ちます。
オブジェクトのダウンロード
次のサンプルコードは、オブジェクトをローカルデバイスにダウンロードする方法の例を示しています。
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。
String endpoint = "yourEndpoint";
// STSから取得した一時的なAccessKeyペアを指定します。
文字列accessKeyId = "yourAccessKeyId";
文字列accessKeySecret = "yourAccessKeySecret";
// STSから取得したセキュリティトークンを指定します。
文字列securityToken = "yourSecurityToken";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId、accessKeySecret、securityToken);
// OSSClientインスタンスを作成します。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
// オブジェクトをダウンロードするリクエストを作成します。
GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectName>");
OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
@オーバーライド
public void onSuccess(GetObjectRequest request, GetObjectResult result) {
// リクエストが成功しました。
Log.d("asyncGetObject" 、"DownloadSuccess");
Log.d("Content-Length", "+ result.getContentLength());
InputStream inputStream = result.getObjectContent();
byte[] buffer = new byte[2048];
int len;
try {
while ((len = inputStream.read(buffer)) ! = -1) {
// ここに独自のコードを追加して、ダウンロードしたデータを処理できます。
}
} catch(IOException e){
e.printStackTrace();
}
}
@オーバーライド
// GetObjectリクエストが成功した場合、GetObjectResultが返されます。 GetObjectResultは、入力ストリームのインスタンスを含む。 返された入力ストリームを処理する必要があります。
public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// リクエスト例外を処理します。
if (clientExcepion != null) {
// ネットワーク例外などのクライアント例外を処理します。
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// サービス例外を処理します。
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
// ダウンロードタスクをキャンセルします。
// task.ca ncel();
// オブジェクトがダウンロードされるまで待ちます。
// task.waitUntilFinished();