Object Storage Service (OSS) では、オブジェクトタグを設定してオブジェクトを分類できます。 このトピックでは、オブジェクトにタグを追加する方法、オブジェクトのタグを照会する方法、およびオブジェクトのタグを削除する方法について説明します。
使用上の注意
このトピックのサンプルコードを実行する前に、カスタムドメイン名やSecurity Token Service (STS) などの方法を使用してOSSClientインスタンスを作成する必要があります。 詳細については、「初期化」をご参照ください。
オブジェクトのタグ付けの設定
オブジェクトをアップロードするときにオブジェクトにタグを追加する
アップロードするオブジェクトと同じ名前のオブジェクトが指定されたパスに既に存在する場合、既存のオブジェクトはアップロードされたオブジェクトによって上書きされます。 既存のオブジェクトを上書きしたくない場合は、パラメーターを設定できます。 詳細については、「オブジェクトが同じ名前のオブジェクトによって上書きされないようにする」をご参照ください。
次のサンプルコードは、オブジェクトをアップロードするときにオブジェクトにタグを追加する方法の例を示しています。
// オブジェクトのアップロード要求を作成します。
// バケットの名前、オブジェクトのフルパス、およびローカルファイルのフルパスを指定します。 この例では、バケットの名前は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 (タグ、"UTF-8");
ObjectMetadata metadata = new ObjectMetadata();
metadata.setHeader("x-oss-tagging", tagHeader);
put.setMetadata (メタデータ);
// ローカルファイルを非同期モードでアップロードする場合、進行状況のコールバックを設定できます。
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());
}
}
});
既存のオブジェクトへのタグの追加またはタグの変更
次のサンプルコードは、既存のオブジェクトのタグを追加または変更する方法の例を示しています。
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 例: exampledir/exampleobject.txt。 オブジェクトのフルパスにバケット名を含めないでください。
文字列objectName = "exampledir/exampleobject.txt";
Map<String, String> tags = new HashMap<String, String>();
// オブジェクトに追加するタグを設定します。
tags.put("所有者" 、"ジョン");
tags.put("type" 、"document");
PutObjectTaggingRequest putObjectTaggingRequest=新しいPutObjectTaggingRequest(bucketName、objectName、タグ);
oss.asyncPutObjectTagging(putObjectTaggingRequest, new OSSCompletedCallback<PutObjectTaggingRequest, PutObjectTaggingResult>() {
@オーバーライド
public void onSuccess(PutObjectTaggingRequestリクエスト, PutObjectTaggingResult result) {
Log.d("PutTagging" 、"PutTaggingSuccess");
}
@オーバーライド
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 (タグ、"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>() {
@オーバーライド
public void onSuccess(CopyObjectRequest request, CopyObjectResult result) {
Log.d("copyObject" 、"copy success!");
}
@オーバーライド
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=新しい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 (タグ、"UTF-8");
ObjectMetadata metadata = new ObjectMetadata();
metadata.setHeader("x-oss-tagging", tagHeader);
putSymlink.setMetadata (メタデータ);
OSSAsyncTask task = oss.asyncPutSymlink(putSymlink, new OSSCompletedCallback<PutSymlinkRequest,
PutSymlinkResult>() {
@オーバーライド
public void onSuccess(PutSymlinkRequestリクエスト、PutSymlinkResult結果) {
OSSLog.logInfo("code:" + result.getStatusCode());
}
@オーバーライド
public void onFailure(PutSymlinkRequestリクエスト, ClientException clientException,
ServiceException serviceException) {
OSSLog.logError("error: " + serviceException.getRawMessage());
}
});
オブジェクトのタグの照会
次のサンプルコードは、オブジェクトのタグを照会する方法の例を示しています。
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 例: exampledir/exampleobject.txt。 オブジェクトのフルパスにバケット名を含めないでください。
文字列objectName = "exampledir/exampleobject.txt";
// オブジェクトのタグを照会します。
GetObjectTaggingRequest getObjectTaggingRequest=新しいGetObjectTaggingRequest(bucketName、objectName);
oss.asyncGetObjectTagging(getObjectTaggingRequest, new OSSCompletedCallback<GetObjectTaggingRequest, GetObjectTaggingResult>() {
@オーバーライド
public void onSuccess(GetObjectTaggingRequestリクエスト, GetObjectTaggingResult result) {
for (Map.Entry<String, String> s : result.getTags().entrySet()) {
Log.d("tag", "key: " + s.getKey() + ", value: " + s.getValue());
}
}
@オーバーライド
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。 オブジェクトのフルパスにバケット名を含めないでください。
文字列objectName = "exampledir/exampleobject.txt";
// オブジェクトのタグを削除します。
DeleteObjectTaggingRequest deleteObjectTaggingRequest=新しいDeleteObjectTaggingRequest(bucketName, objectName);
oss.asyncDeleteObjectTagging(deleteObjectTaggingRequest, new OSSCompletedCallback<DeleteObjectTaggingRequest, DeleteObjectTaggingResult>() {
@オーバーライド
public void onSuccess(DeleteObjectTaggingRequest request, DeleteObjectTaggingResult result) {
Log.d("deleteTagging" 、"deleteTagging success");
}
@オーバーライド
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インスタンスを初期化する方法の詳細については、「初期化」をご参照ください。