Object Storage Service (OSS) では、オブジェクトを分類するためにオブジェクトタグを設定できます。このトピックでは、オブジェクトにタグを追加する方法、オブジェクトのタグをクエリする方法、およびオブジェクトのタグを削除する方法について説明します。
注意事項
このトピックのサンプルコードを実行する前に、カスタムドメイン名やセキュリティトークンサービス (STS) を使用するなどの方法で OSSClient インスタンスを作成する必要があります。詳細については、「初期化 (Android SDK)」をご参照ください。
オブジェクトタグ付けの設定
オブジェクトのアップロード時のタグ追加
指定したパスにアップロードしたいオブジェクトと同じ名前のオブジェクトが既に存在する場合、既存のオブジェクトはアップロードされたオブジェクトによって上書きされます。既存のオブジェクトを上書きしたくない場合は、パラメーターを設定できます。詳細については、「同名オブジェクトによる上書きの防止」をご参照ください。
以下のサンプルコードは、オブジェクトのアップロード時にタグを追加する方法の例を示しています。
// アップロードリクエストを作成します。
// バケット名、オブジェクトの完全なパス、ローカルファイルの完全なパスを指定します。例:examplebucket、exampledir/exampleobject.txt、/storage/emulated/0/oss/examplefile.txt。
// オブジェクトの完全なパスにバケット名を含めることはできません。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");
Map<String, String> tags = new HashMap<String, String>();
// タグ情報を設定します。
tags.put("key1", "value1");
tags.put("Key2", "value2");
String tagHeader = OSSUtils.paramToQueryString(tags, "UTF-8");
ObjectMetadata metadata = new ObjectMetadata();
metadata.setHeader("x-oss-tagging", tagHeader);
put.setMetadata(metadata);
// 非同期アップロードの進行状況を追跡するためのコールバックを設定します。
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
@Override
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>() {
@Override
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
Log.d("PutObject", "UploadSuccess");
Log.d("ETag", result.getETag());
Log.d("RequestId", result.getRequestId());
}
@Override
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());
}
}
});既存オブジェクトへのタグの追加または変更
以下のサンプルコードは、既存のオブジェクトにタグを追加または変更する方法の例を示しています。
// バケット名を指定します。例:examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。例:exampledir/exampleobject.txt。オブジェクトの完全なパスにバケット名を含めることはできません。
String objectName = "exampledir/exampleobject.txt";
Map<String, String> tags = new HashMap<String, String>();
// タグ情報を設定します。
tags.put("owner", "John");
tags.put("type", "document");
PutObjectTaggingRequest putObjectTaggingRequest = new PutObjectTaggingRequest(bucketName, objectName, tags);
oss.asyncPutObjectTagging(putObjectTaggingRequest, new OSSCompletedCallback<PutObjectTaggingRequest, PutObjectTaggingResult>() {
@Override
public void onSuccess(PutObjectTaggingRequest request, PutObjectTaggingResult result) {
Log.d("PutTagging", "PutTaggingSuccess");
}
@Override
public void onFailure(PutObjectTaggingRequest 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());
}
}
});オブジェクトのコピー時のタグ追加
以下のサンプルコードは、オブジェクトのコピー時にタグを追加する方法の例を示しています。
// CopyObject リクエストを作成します。
// ソースバケット名、ソースオブジェクトの完全なパス、宛先バケット名、宛先オブジェクトの完全なパスを指定します。例:examplebucket、exampledir/exampleobject.txt、destexamplebucket、destexampledir/exampleobject.txt。
// オブジェクトの完全なパスにバケット名を含めることはできません。
CopyObjectRequest copyObjectRequest = new CopyObjectRequest("examplebucket", "exampledir/exampleobject.txt",
"destexamplebucket", "destexampledir/exampleobject.txt");
ObjectMetadata objectMetadata = new ObjectMetadata();
Map<String, String> tags = new HashMap<String, String>();
// 宛先オブジェクトのタグを設定します。
tags.put("key1", "value1");
tags.put("key2", "value2");
String tagHeader = OSSUtils.paramToQueryString(tags, "UTF-8");
objectMetadata.setHeader("x-oss-tagging", tagHeader);
// ソースオブジェクトのタグを無視し、リクエストで指定されたタグを使用します。
objectMetadata.setHeader("x-oss-tagging-directive", "REPLACE");
copyObjectRequest.setNewObjectMetadata(objectMetadata);
OSSAsyncTask copyTask = oss.asyncCopyObject(copyObjectRequest, new OSSCompletedCallback<CopyObjectRequest, CopyObjectResult>() {
@Override
public void onSuccess(CopyObjectRequest request, CopyObjectResult result) {
Log.d("copyObject", "copy success!");
}
@Override
public void onFailure(CopyObjectRequest 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());
}
}
});シンボリックリンクへのタグ追加
以下のサンプルコードは、シンボリックリンクにタグを追加する方法の例を示しています。
PutSymlinkRequest putSymlink = new PutSymlinkRequest();
// バケット名を指定します。例:examplebucket。
putSymlink.setBucketName("examplebucket");
// シンボリックリンクの名前を設定します。
putSymlink.setObjectKey("yourSymLink");
// オブジェクトファイルの名前を設定します。
putSymlink.setTargetObjectName("yourTargetObjectName");
Map<String, String> tags = new HashMap<String, String>();
// タグ情報を設定します。
tags.put("key1", "value1");
tags.put("key2", "value2");
String tagHeader = OSSUtils.paramToQueryString(tags, "UTF-8");
ObjectMetadata metadata = new ObjectMetadata();
metadata.setHeader("x-oss-tagging", tagHeader);
putSymlink.setMetadata(metadata);
OSSAsyncTask task = oss.asyncPutSymlink(putSymlink, new OSSCompletedCallback<PutSymlinkRequest,
PutSymlinkResult>() {
@Override
public void onSuccess(PutSymlinkRequest request, PutSymlinkResult result) {
OSSLog.logInfo("code:"+result.getStatusCode());
}
@Override
public void onFailure(PutSymlinkRequest request, ClientException clientException,
ServiceException serviceException) {
OSSLog.logError("error: "+serviceException.getRawMessage());
}
});オブジェクトのタグのクエリ
以下のサンプルコードは、オブジェクトのタグをクエリする方法の例を示しています。
// バケット名を指定します。例:examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。例:exampledir/exampleobject.txt。オブジェクトの完全なパスにバケット名を含めることはできません。
String objectName = "exampledir/exampleobject.txt";
// オブジェクトのタグを取得します。
GetObjectTaggingRequest getObjectTaggingRequest = new GetObjectTaggingRequest(bucketName, objectName);
oss.asyncGetObjectTagging(getObjectTaggingRequest, new OSSCompletedCallback<GetObjectTaggingRequest, GetObjectTaggingResult>() {
@Override
public void onSuccess(GetObjectTaggingRequest request, GetObjectTaggingResult result) {
for (Map.Entry<String, String> s : result.getTags().entrySet()) {
Log.d("tag", "key: " + s.getKey() + ", value: " + s.getValue());
}
}
@Override
public void onFailure(GetObjectTaggingRequest 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());
}
}
});オブジェクトのタグの削除
以下のサンプルコードは、オブジェクトのタグを削除する方法の例を示しています。
// バケット名を指定します。例:examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。例:exampledir/exampleobject.txt。オブジェクトの完全なパスにバケット名を含めることはできません。
String objectName = "exampledir/exampleobject.txt";
// オブジェクトのタグを削除します。
DeleteObjectTaggingRequest deleteObjectTaggingRequest = new DeleteObjectTaggingRequest(bucketName, objectName);
oss.asyncDeleteObjectTagging(deleteObjectTaggingRequest, new OSSCompletedCallback<DeleteObjectTaggingRequest, DeleteObjectTaggingResult>() {
@Override
public void onSuccess(DeleteObjectTaggingRequest request, DeleteObjectTaggingResult result) {
Log.d("deleteTagging", "deleteTagging success");
}
@Override
public void onFailure(DeleteObjectTaggingRequest 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());
}
}
});関連ドキュメント
オブジェクトタグ付けの完全なサンプルコードについては、GitHub をご参照ください。
オブジェクトのタグを設定するために呼び出すことができる API 操作の詳細については、「PutObjectTagging」をご参照ください。
オブジェクトのタグをクエリするために呼び出すことができる API 操作の詳細については、「GetObjectTagging」をご参照ください。
オブジェクトのタグを削除するために呼び出すことができる API 操作の詳細については、「DeleteObjectTagging」をご参照ください。
既存のオブジェクトが上書きされるのを防ぐ方法の詳細については、「同名オブジェクトによる上書きの防止」をご参照ください。
OSSClient インスタンスを初期化する方法の詳細については、「初期化」をご参照ください。