Object Storage Service (OSS) では、オブジェクトタグを設定してオブジェクトを分類できます。 ライフサイクルルールを設定し、タグに基づいてオブジェクトへのアクセスを制御できます。
使用上の注意
オブジェクトのタグ付けを設定する前に、この機能に精通していることを確認してください。 詳細については、「オブジェクトのタグ付け」をご参照ください。
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
OSS SDK for Java 3.5.0以降のみがオブジェクトタグ付けをサポートしています。
オブジェクトにタグを追加するには、
oss:PutObjectTagging
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
オブジェクトをアップロードするときにオブジェクトにタグを追加する
次の例では、単純アップロード、マルチパートアップロード、追加アップロード、および再開可能アップロードを使用してオブジェクトをアップロードするときに、オブジェクトにタグを追加する方法について説明します。
シンプルアップロードを使用してオブジェクトをアップロードするときにオブジェクトにタグを追加する
次のサンプルコードでは、単純アップロードを使用してオブジェクトをアップロードするときに、オブジェクトにタグを追加する方法の例を示します。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*; java.io.ByteArrayInputStreamをインポートします。java.util.HashMapをインポートします。java.util.Mapをインポートします。public classデモ { public static void main(String[] args) throws Exception { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // バケットの名前を指定します。 例: examplebucket. String bucketName = "examplebucket"; // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 文字列objectName = "exampledir/exampleobject.txt"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { Map<String, String> tags = new HashMap<String, String>(); // オブジェクトタグのキーと値を指定します。 たとえば、キーをownerに、値をJohnに設定します。 tags.put("所有者" 、"ジョン"); tags.put("type" 、"document"); // HTTPヘッダーのタグを設定します。 ObjectMetadata metadata = new ObjectMetadata(); metadata.setObjectTagging (タグ); // オブジェクトをアップロードし、オブジェクトにタグを追加します。 String content = "<yourtContent>"; ossClient.putObject(bucketName、objectName、new ByteArrayInputStream(content.getBytes()) 、メタデータ); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
マルチパートアップロードを使用してオブジェクトをアップロードするときにオブジェクトにタグを追加する
次のサンプルコードは、マルチパートアップロードを使用してオブジェクトをアップロードするときに、オブジェクトにタグを追加する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*; java.io.* をインポートします。java.util.* をインポートします。public classデモ { public static void main(String[] args) throws Exception { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // バケットの名前を指定します。 例: examplebucket. String bucketName = "examplebucket"; // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 文字列objectName = "exampledir/exampleobject.txt"; // アップロードするローカルファイルのフルパスを指定します。 デフォルトでは、ローカルファイルのフルパスを指定しない場合、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。 String localFile = "D :\\ localpath\\examplefile.txt"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { /* 手順1: マルチパートアップロードタスクを開始します。 */ // HTTPヘッダーのタグを設定します。 Map<String, String> tags = new HashMap<String, String>(); // オブジェクトタグのキーと値を指定します。 たとえば、キーをownerに、値をJohnに設定します。 tags.put("所有者" 、"ジョン"); tags.put("type" 、"document"); ObjectMetadata metadata = new ObjectMetadata(); metadata.setObjectTagging (タグ); // InitiateMultipartUploadRequestリクエストを開始し、オブジェクトにタグを追加します。 InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName、objectName、メタデータ); InitiateMultipartUploadResult result = ossClient.initiateMultipartUpload(request); // アップロードIDを取得します。 アップロードIDは、マルチパートアップロードタスクを一意に識別します。 アップロードIDを使用して、マルチパートアップロードタスクを照会またはキャンセルできます。 String uploadId = result.getUploadId(); /* ステップ2: パーツをアップロードします。 */ // partETags is a set of PartETags. PartETagは、アップロードされたパーツのパーツ番号とETagで構成されます。 List<PartETag> partETags = new ArrayList<PartETag>(); // Calculate the total number of parts. final long partSize = 1x1024 x 1024L; // パーツサイズを1 MBに設定します。 final File sampleFile=新しいファイル (localFile); long fileLength = sampleFile.length(); int partCount = (int) (fileLength / partSize); if (fileLength % partSize != 0) { partCount++; } // すべての部品をアップロードします。 for (int i = 0; i <recordCount; i ++ ) { long startPos = i * partSize; long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize; InputStream instream = null; try { instream=新しいFileInputStream(sampleFile); // アップロードされたパーツをスキップします。 instream.skip(startPos); } catch (FileNotFoundException e) { e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } UploadPartRequest uploadPartRequest = new UploadPartRequest(); uploadPartRequest.setBucketName(bucketName); uploadPartRequest.setKey(objectName); uploadPartRequest.setUploadId(uploadId); uploadPartRequest.setInputStream(instream); // パーツサイズを指定します。 最後の部分を除く各部分のサイズは100 KB以上でなければなりません。 uploadPartRequest.setPartSize(curPartSize); // 部品番号を指定します。 各部品には部品番号が必要です。 部品番号は1から10000の範囲です。 この範囲を超える部品番号を指定した場合、OSSはInvalidArgumentエラーコードを返します。 uploadPartRequest.setPartNumber( i + 1); // パーツは必ずしも順番にアップロードされるとは限らず、異なるOSSクライアントからアップロードできます。 OSSは、部品番号に基づいて部品をソートし、部品を結合して完全なオブジェクトにします。 UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest); // 部品をアップロードすると、OSSはPartETagを返します。 The PartETag is stored in partETags. partETags.add(uploadPartResult.getPartETag()); } /* Step 3: Complete multipart upload. */ // PartETagsに格納されているpartEtagsは、部品番号の昇順でソートされます。 Collections.sort(partETags, new Comparator<PartETag>() { public int compare(PartETag p1, PartETag p2) { return p1.getPartNumber() - p2.getPartNumber(); } }); // この操作を実行するときに、有効なすべてのPartETagsを指定します。 OSS verifies the validity of all parts one by one after it receives PartETags. すべての部品が検証された後、OSSは部品を完全なオブジェクトに結合します。 CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags); ossClient.completeMultipartUpload(completeMultipartUploadRequest); // オブジェクトに追加されたタグを表示します。 TagSet tagSet = ossClient.getObjectTagging(bucketName、objectName); Map<String, String> getTags = tagSet.getAllTags(); System.out.println("object tagging: " + getTags.toString()); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
追加アップロードを使用してオブジェクトをアップロードするときにオブジェクトにタグを追加する
次のサンプルコードは、追加アップロードを使用してオブジェクトをアップロードするときに、オブジェクトにタグを追加する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*; java.io.* をインポートします。java.util.* をインポートします。public classデモ { public static void main(String[] args) throws Exception { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // バケットの名前を指定します。 例: examplebucket. String bucketName = "examplebucket"; // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 文字列objectName = "exampledir/exampleobject.txt"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { String content1 = "Hello OSS A \n"; String content2 = "Hello OSS B \n"; String content3 = "Hello OSS C \n"; Map<String, String> tags = new HashMap<String, String>(); // オブジェクトタグのキーと値を指定します。 たとえば、キーをownerに、値をJohnに設定します。 tags.put("所有者" 、"ジョン"); tags.put("type" 、"document"); ObjectMetadata meta = new ObjectMetadata(); // オブジェクトのタグを設定します。 meta.setObjectTagging (タグ); // アップロードするコンテンツの種類を指定します。 meta.setContentType("text/plain"); // AppendObjectRequestを使用してパラメーターを設定します。 AppendObjectRequest appendObjectRequest = new AppendObjectRequest(bucketName, objectName, new ByteArrayInputStream(content1.getBytes()), meta); // AppendObjectRequestを使用してパラメーターを設定します。 // appendObjectRequest.setBucketName(bucketName); // appendObjectRequest.setKey(objectName); // 追加するコンテンツのタイプを設定します。 InputStreamとFileの2つのタイプがサポートされています。 この例では、タイプはInputStreamに設定されています。 //appendObjectRequest.setInputStream(new ByteArrayInputStream(content1.getBytes())); // 追加するコンテンツのタイプを設定します。 InputStreamとFileの2つのタイプがサポートされています。 この例では、タイプは [ファイル] に設定されています。 // アップロードするローカルファイルのフルパスを指定します。 デフォルトでは、ローカルファイルのフルパスを指定しない場合、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。 // appendObjectRequest.setFile (新しいファイル ("D :\\ localpath\\examplefile.txt")); // オブジェクトのメタデータを指定します。 メタデータを指定できるのは、オブジェクトに対して最初の追加操作を実行するときだけです。 //appendObjectRequest.setMetadata(meta); // 最初の追加操作を実行します。 オブジェクトが初めて追加されたときに設定されたタグのみがオブジェクトに追加されます。 // 追加操作の開始位置を設定します。 appendObjectRequest.setPosition(0L); AppendObjectResult appendObjectResult = ossClient.appendObject(appendObjectRequest); // オブジェクトのCRC-64を計算します。 値はECMA-182仕様に基づいて計算されます。 System.out.println(appendObjectResult.getObjectCRC()); // 2番目の追加操作を実行します。 // NextPositionは、オブジェクトの長さである、次の追加操作の開始位置を指定します。 appendObjectRequest.setPosition(appendObjectResult.getNextPosition()); appendObjectRequest.setInputStream(new ByteArrayInputStream(content2.getBytes())); appendObjectResult = ossClient.appendObject(appendObjectRequest); // 3番目の追加操作を実行します。 appendObjectRequest.setPosition(appendObjectResult.getNextPosition()); appendObjectRequest.setInputStream(new ByteArrayInputStream(content3.getBytes())); appendObjectResult = ossClient.appendObject(appendObjectRequest); // アップロードされたオブジェクトに追加されたタグを表示します。 TagSet tagSet = ossClient.getObjectTagging(bucketName、objectName); Map<String, String> getTags = tagSet.getAllTags(); System.out.println("object tagging: " + getTags.toString()); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
再開可能アップロードを使用してオブジェクトをアップロードするときにオブジェクトにタグを追加する
次のサンプルコードは、再開可能アップロードを使用してオブジェクトをアップロードするときに、オブジェクトにタグを追加する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*; java.util.* をインポートします。public classデモ { public static void main(String[] args) Throwable { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // バケットの名前を指定します。 例: examplebucket. String bucketName = "examplebucket"; // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 文字列objectName = "exampledir/exampleobject.txt"; // アップロードするローカルファイルのフルパスを指定します。 デフォルトでは、ローカルファイルのフルパスを指定しない場合、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。 String localFile = "D :\\ localpath\\examplefile.txt"; // 各パーツのアップロードの進行状況を記録するチェックポイントファイルを指定します。 チェックポイントファイルの名前には、拡張子は、localFileで指定されたローカルファイルと同じパスになります。 // ローカルファイルがOSSにアップロードされると、チェックポイントファイルは削除されます。 文字列yourCheckpointFile = "D :\\ localpath\\uploadfile.ucp"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // オブジェクトに追加するタグを設定します。 Map<String, String> tags = new HashMap<String, String>(); // オブジェクトタグのキーと値を指定します。 たとえば、キーをownerに、値をJohnに設定します。 tags.put("所有者" 、"ジョン"); tags.put("type" 、"document"); ObjectMetadata meta = new ObjectMetadata(); // アップロードするコンテンツの種類を指定します。 meta.setContentType("text/plain"); // オブジェクトにタグを追加します。 meta.setObjectTagging (タグ); // UploadFileRequestを使用してパラメーターを設定します。 UploadFileRequest uploadFileRequest = new UploadFileRequest(bucketName,objectName); // UploadFileRequestを使用してパラメーターを設定します。 // バケットの名前を指定します。 // uploadFileRequest.setBucketName(bucketName); // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 // uploadFileRequest.setKey(objectName); // アップロードするローカルファイルの名前を指定します。 uploadFileRequest.setUploadFile(localFile); // 再開可能アップロードタスクのスレッド数を指定します。 デフォルト値は 1 です。 uploadFileRequest.setTaskNum(5); // 各パーツのサイズを指定します。 有効な値: 100 KB〜5 GB。 各パーツのデフォルトサイズは、次の式に基づいて計算されます。各パーツのデフォルトサイズ=オブジェクトサイズ /10,000。 uploadFileRequest.setPartSize(1 * 1024 * 1024); // 再開可能アップロードを有効にします。 デフォルトでは、再開可能アップロードは無効になっています。 uploadFileRequest.setEnableCheckpoint(true); // 各パーツのアップロードの進行状況を記録するチェックポイントファイルを指定します。 再開可能アップロードを有効にする場合は、このパラメーターを設定する必要があります。 チェックポイントファイルには、アップロードの進行状況が保存されます。 部品のアップロードに失敗した場合、OSSはチェックポイントファイルに記録された進行状況情報に基づいて部品のアップロードを再開できます。 ローカルファイルがOSSにアップロードされると、チェックポイントファイルは削除されます。 デフォルトでは、チェックポイントファイルはアップロードするローカルファイルと同じディレクトリ (uploadFile.ucp) を共有します。 uploadFileRequest.setCheckpointFile(yourCheckpointFile); // オブジェクトメタデータを設定します。 uploadFileRequest.setObjectMetadata(meta); // オブジェクトのアップロード後にコールバックを設定します。 パラメータータイプはCallbackです。 // uploadFileRequest.setCallback("yourCallbackEvent"); // 再開可能なアップロードタスクを開始し、オブジェクトに追加するタグを設定します。 ossClient.uploadFile(uploadFileRequest); // アップロードされたオブジェクトに追加されたタグを表示します。 TagSet tagSet = ossClient.getObjectTagging(bucketName、objectName); Map<String, String> getTags = tagSet.getAllTags(); System.out.println("object tagging: " + getTags.toString()); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
既存のオブジェクトへのタグの追加またはタグの変更
既存のオブジェクトにタグがない場合、またはオブジェクトのタグが要件を満たしていない場合は、オブジェクトのタグを追加または変更できます。
次のサンプルコードは、既存のオブジェクトのタグを追加または変更する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。java.util.* をインポートします。public classデモ {
public static void main(String[] args) Throwable {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。
文字列objectName = "exampledir/exampleobject.txt";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
Map<String, String> tags = new HashMap<String, String>();
// オブジェクトタグのキーと値を指定します。 たとえば、キーをownerに、値をJohnに設定します。
tags.put("所有者" 、"ジョン");
tags.put("type" 、"document");
// オブジェクトにタグを追加します。
ossClient.setObjectTagging(bucketName、objectName、タグ);
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
オブジェクトの特定のバージョンのタグを追加または変更する
バケットのバージョン管理が有効になっている場合、オブジェクトのバージョンIDを指定することで、バケット内のオブジェクトの特定のバージョンにタグを追加したり、タグを変更したりできます。
次のサンプルコードでは、特定のバージョンのオブジェクトにタグを追加またはタグを変更する方法の例を示します。
バージョンIDの取得方法の詳細については、「オブジェクトのリスト」をご参照ください。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.SetObjectTaggingRequestをインポートします。java.util.* をインポートします。public classデモ {
public static void main(String[] args) Throwable {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。
文字列objectName = "exampledir/exampleobject.txt";
// オブジェクトのバージョンIDを指定します。 例: CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm **** 。
文字列versionId = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm ****";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
Map<String, String> tags = new HashMap<String, String>(1);
// オブジェクトタグのキーと値を指定します。 たとえば、キーをownerに、値をJohnに設定します。
tags.put("所有者" 、"ジョン");
tags.put("type" 、"document");
SetObjectTaggingRequest setObjectTaggingRequest=新しいSetObjectTaggingRequest(bucketName, objectName, tags);
setObjectTaggingRequest.setVersionId(versionId);
ossClient.setObjectTagging(setObjectTaggingRequest);
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
オブジェクトをコピーするときにオブジェクトにタグを追加する
次のいずれかの方法を使用して、オブジェクトをコピーするときにオブジェクトのタグ付けを設定できます。
コピー: ソースオブジェクトのタグがコピー先オブジェクトにコピーされます。
置換: ターゲットオブジェクトには、ソースオブジェクトのタグではなく、リクエストで指定されたタグがあります。
次の例では、シンプルコピーモードで1 GB未満のオブジェクトに、マルチパートコピーモードで1 GBを超えるオブジェクトにタグを追加する方法について説明します。
シンプルコピーモードでオブジェクトをコピーするときにオブジェクトにタグを追加する
次のサンプルコードは、シンプルコピーモードでオブジェクトをコピーするときに、1 GB未満のオブジェクトにタグを追加する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.int ernal.OSSHeadersをインポートします。com.aliyun.oss.mo del.CopyObjectRequestをインポートします。com.aliyun.oss.mo del.CopyObjectResultをインポートします。com.aliyun.oss.mo del.TagSetをインポートします。java.util.* をインポートします。public classデモ { public static void main(String[] args) Throwable { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // ソースバケットの名前を指定します。 例: srcexamplebucket. 文字列sourceBucketName = "srcexamplebucket"; // ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: srcexampledir/exampleobject.txt。 文字列sourceObjectName = "srcexampledir/exampleobject.txt"; // 宛先バケットの名前を指定します。 例: destexamplebucket。 文字列destinationBucketName = "destexamplebucket"; // 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destexampledir/exampleobject.txt。 文字列destinationObjectName = "destexampledir/exampleobject.txt"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // CopyObjectRequestを作成します。 CopyObjectRequest copyObjectRequest = new CopyObjectRequest(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName); // ターゲットオブジェクトに追加するタグを設定します。 ヘッダーが設定されていない場合、ソースオブジェクトのタグはデフォルトで宛先オブジェクトに追加されます。 Map<String, String> headers = new HashMap<String, String>(); headers.put(OSSHeaders.COPY_OBJECT_TAGGING_DIRECTIVE、"REPLACE"); headers.put(OSSHeaders.OSS_TAGGING, "key1=value1&key2=value2"); copyObjectRequest.setHeaders(headers); // ソースオブジェクトをコピーします。 CopyObjectResult result = ossClient.copyObject(copyObjectRequest); System.out.println("ETag: " + result.getETag() + "LastModified: " + result.getLastModified()); // 宛先オブジェクトに追加されたタグを表示します。 TagSet tagSet = ossClient.getObjectTagging(destinationBucketName, destinationObjectName); Map<String, String> getTags = tagSet.getAllTags(); System.out.println("dest object tagging: " + getTags.toString()); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
マルチパートコピーモードでオブジェクトをコピーするときにオブジェクトにタグを追加する
次のサンプルコードは、マルチパートコピーモードでオブジェクトをコピーするときに、1 GBを超えるオブジェクトにタグを追加する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*; java.util.* をインポートします。public classデモ { public static void main(String[] args) Throwable { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // ソースバケットの名前を指定します。 例: srcexamplebucket. 文字列sourceBucketName = "srcexamplebucket"; // ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: srcexampledir/exampleobject.txt。 文字列sourceObjectName = "srcexampledir/exampleobject.txt"; // 宛先バケットの名前を指定します。 例: destexamplebucket。 文字列destinationBucketName = "destexamplebucket"; // 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destexampledir/exampleobject.txt。 文字列destinationObjectName = "destexampledir/exampleobject.txt"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { ObjectMetadata objectMetadata = ossClient.getObjectMetadata(sourceBucketName, sourceObjectName); // ソースオブジェクトのサイズを照会します。 long contentLength = objectMetadata.getContentLength(); // 部品サイズを10 MBに設定します。 long partSize = 1024 * 1024 * 10; // Calculate the total number of parts. int partCount = (int) (contentLength / partSize); if (contentLength % partSize != 0) { partCount++; } System.out.println("total part count:" + partCount); // HTTPヘッダーのタグを設定します。 Map<String, String> tags2 = new HashMap<String, String>(); // オブジェクトタグのキーと値を指定します。 たとえば、キーを所有者に設定し、値をLilyに設定します。 tags2.put("所有者" 、"リリー"); tags2.put("type" 、"document"); ObjectMetadata metadata = new ObjectMetadata(); metadata.setObjectTagging(tags2); // マルチパートコピータスクを開始し、ターゲットオブジェクトに追加するタグを設定します。 InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(destinationBucketName, destinationObjectName, metadata); InitiateMultipartUploadResult initiateMultipartUploadResult = ossClient.initiateMultipartUpload(initiateMultipartUploadRequest); String uploadId = initiateMultipartUploadResult.getUploadId(); // マルチパートコピータスクを開始します。 List<PartETag> partETags = new ArrayList<PartETag>(); for (int i = 0; i <recordCount; i ++ ) { // 各パーツのサイズを計算します。 long skipBytes = partSize * i; long size = partSize < contentLength - skipBytes ? partSize : contentLength - skipBytes; // Create UploadPartCopyRequest. UploadPartCopyRequestを使用して条件を指定できます。 UploadPartCopyRequest uploadPartCopyRequest = new UploadPartCopyRequest(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName); uploadPartCopyRequest.setUploadId(uploadId); uploadPartCopyRequest.setPartSize(size); uploadPartCopyRequest.setBeginIndex(skipBytes); uploadPartCopyRequest.setPartNumber(i + 1); UploadPartCopyResult uploadPartCopyResult = ossClient.uploadPartCopy(uploadPartCopyRequest); // 返されたPartETagsをpartETagsに格納します。 partETags.add(uploadPartCopyResult.getPartETag()); } // マルチパートコピータスクを完了します。 CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest( destinationBucketName, destinationObjectName, uploadId, partETags); CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest); System.out.println("versionId: " + completeMultipartUploadResult.getVersionId()); // ソースオブジェクトのタグを表示します。 TagSet tagSet = ossClient.getObjectTagging(sourceBucketName, sourceObjectName); Map<String, String> getTags = tagSet.getAllTags(); System.out.println("src object tagging: " + getTags.toString()); // 宛先オブジェクトに追加されたタグを表示します。 tagSet = ossClient.getObjectTagging(destinationBucketName, destinationObjectName); getTags = tagSet.getAllTags(); System.out.println("dest object tagging: " + getTags.toString()); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
シンボリックリンクにタグを追加する
次のサンプルコードは、シンボリックリンクにタグを追加する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.util.* をインポートします。public classデモ {
public static void main(String[] args) Throwable {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。 例: examplebucket.
String bucketName = "examplebucket";
// シンボリックリンクのフルパスを指定します。 例: shortcut/myobject.txt。
文字列symLink = "shortcut/myobject.txt";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。
文字列destinationObjectName = "exampledir/exampleobject.txt";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// シンボリックリンクに追加するタグを設定します。
Map<String, String> tags = new HashMap<String, String>();
// オブジェクトタグのキーと値を指定します。 たとえば、キーをownerに、値をJohnに設定します。
tags.put("所有者" 、"ジョン");
tags.put("type" 、"document");
// アップロードされたオブジェクトのメタデータを設定します。
ObjectMetadata metadata = new ObjectMetadata();
metadata.setObjectTagging (タグ);
// Create CreateSymlinkRequest.
CreateSymlinkRequest createSymlinkRequest = new CreateSymlinkRequest(bucketName, symLink, destinationObjectName);
// メタデータを設定します。
createSymlinkRequest.setMetadata(metadata);
// シンボリックリンクを作成します。
ossClient.createSymlink(createSymlinkRequest);
// シンボリックリンクに追加されたタグを表示します。
TagSet tagSet = ossClient.getObjectTagging(bucketName、symLink);
Map<String, String> getTags = tagSet.getAllTags();
System.out.println("symLink tagging: " + getTags.toString());
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
参考資料
オブジェクトのタグ付けの設定に使用される完全なサンプルコードについては、『GitHub』をご参照ください。
オブジェクトのタグ付けを設定するために呼び出すことができるAPI操作の詳細については、「PutObjectTagging」をご参照ください。