すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オブジェクトタグの設定 (Java SDK V1)

最終更新日:Nov 27, 2025

OSS は、バケット内のオブジェクトを分類するためのオブジェクトのタグ付けをサポートしています。 同じタグを持つオブジェクトに対して、ライフサイクルルールとアクセス権限を設定できます。

注意事項

  • オブジェクトタグを設定する前に、この機能について理解しておく必要があります。 詳細については、「オブジェクトのタグ付け」をご参照ください。

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。 サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス認証情報は環境変数から取得されます。 アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「一般的なシナリオの設定例」をご参照ください。

  • オブジェクトのタグ付けは、Java SDK 3.5.0 以降でのみサポートされています。

  • オブジェクトタグを設定するには、oss:PutObjectTagging 権限が必要です。 詳細については、「RAM ユーザーへのカスタムアクセスポリシーの付与」をご参照ください。

オブジェクトのアップロード時のオブジェクトタグの追加

次のコードは、シンプルアップロード、マルチパートアップロード、追加アップロード、および再開可能なアップロード中にオブジェクトにオブジェクトタグを追加する方法の例を示しています。

  • シンプルアップロード時のオブジェクトタグの追加

    次のコードは、シンプルアップロード時にオブジェクトタグを追加する例を示しています。

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.io.ByteArrayInputStream;
    import java.util.HashMap;
    import java.util.Map;
    import com.aliyun.oss.ClientBuilderConfiguration;
    import com.aliyun.oss.common.comm.SignVersion;
    
    public class Demo {
        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。
            String objectName = "exampledir/exampleobject.txt";
            // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
            // OSSClient インスタンスを作成します。
            // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                Map<String, String> tags = new HashMap<String, String>();
                // オブジェクトタグのキーと値を指定します。 例: owner と Tanaka。
                tags.put("owner", "Tanaka");
                tags.put("type", "document");
    
                // HTTP ヘッダーにタグ情報を設定します。
                ObjectMetadata metadata = new ObjectMetadata();
                metadata.setObjectTagging(tags);
    
                // ファイルをアップロードするときにタグ情報を設定します。
                String content = "<yourtContent>";
                ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()), metadata);
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • マルチパートアップロード時のオブジェクトタグの追加

    次のコードは、マルチパートアップロード時にオブジェクトタグを追加する方法を示しています。

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.io.*;
    import java.util.*;
    
    public class Demo {
        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。
            String objectName = "exampledir/exampleobject.txt";
            // ローカルファイルの完全なパスを指定します。 ローカルパスを指定しない場合、ファイルはサンプルプログラムが配置されているプロジェクトに対応するローカルパスからアップロードされます。
            String localFile = "D:\\localpath\\examplefile.txt";
            // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
            // OSSClient インスタンスを作成します。
            // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                /*
                   ステップ 1: マルチパートアップロードイベントを初期化します。
                */
                // HTTP ヘッダーにタグ情報を設定します。
                Map<String, String> tags = new HashMap<String, String>();
                // オブジェクトタグのキーと値を指定します。 例: owner と Tanaka。
                tags.put("owner", "Tanaka");
                tags.put("type", "document");
    
                ObjectMetadata metadata = new ObjectMetadata();
                metadata.setObjectTagging(tags);
    
                // InitiateMultipartUploadRequest リクエストを送信するときにタグ情報を設定します。
                InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName, metadata);
                InitiateMultipartUploadResult result = ossClient.initiateMultipartUpload(request);
                // アップロード ID が返されます。これは、マルチパートアップロードイベントを一意に識別します。 この ID を使用して、マルチパートアップロードの中止やマルチパートアップロードのクエリなどの操作を実行できます。
                String uploadId = result.getUploadId();
    
                /*
                   ステップ 2: パートをアップロードします。
                */
                // partETags は PartETag オブジェクトのコレクションです。 PartETag は、パートの ETag とパート番号で構成されます。
                List<PartETag> partETags =  new ArrayList<PartETag>();
                // パート数を計算します。
                final long partSize = 1 * 1024 * 1024L;   // 1 MB。
                final File sampleFile = new File(localFile);
                long fileLength = sampleFile.length();
                int partCount = (int) (fileLength / partSize);
                if (fileLength % partSize != 0) {
                    partCount++;
                }
                // パートを走査してアップロードします。
                for (int i = 0; i < partCount; i++) {
                    long startPos = i * partSize;
                    long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
                    InputStream instream = null;
                    try {
                        instream = new 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 から 10,000 までの範囲のパート番号があります。 パート番号が有効な範囲にない場合、OSS は InvalidArgument エラーを返します。
                    uploadPartRequest.setPartNumber( i + 1);
                    // パートは任意の順序で、異なるクライアントからアップロードできます。 OSS は、パート番号に基づいてパートを完全なオブジェクトに結合します。
                    UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
                    // 各パートがアップロードされると、OSS からの応答に PartETag が含まれます。 PartETag は partETags に保存されます。
                    partETags.add(uploadPartResult.getPartETag());
                }
    
                /* ステップ 3: マルチパートアップロードを完了します。
                 */
                // partETags はパート番号の昇順でソートする必要があります。
                Collections.sort(partETags, new Comparator<PartETag>() {
                    public int compare(PartETag p1, PartETag p2) {
                        return p1.getPartNumber() - p2.getPartNumber();
                    }
                });
                // この操作を実行するときは、すべての有効な partETags を指定する必要があります。 OSS は、送信された 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 (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • 追加アップロード時のオブジェクトタグの追加

    次のコードは、追加アップロード時にオブジェクトタグを追加する方法を示しています。

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.io.*;
    import java.util.*;
    
    public class Demo {
        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。
            String objectName = "exampledir/exampleobject.txt";
            // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
            // OSSClient インスタンスを作成します。
            // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            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 と Tanaka。
                tags.put("owner", "Tanaka");
                tags.put("type", "document");
    
                ObjectMetadata meta = new ObjectMetadata();
                // アップロードされたオブジェクトのタグを設定します。
                meta.setObjectTagging(tags);
                // アップロードされたオブジェクトのコンテンツタイプを指定します。
                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 タイプにすることができます。 この例では、コンテンツは InputStream タイプです。
                //appendObjectRequest.setInputStream(new ByteArrayInputStream(content1.getBytes()));
                // 追加するコンテンツを設定します。 コンテンツは InputStream または File タイプにすることができます。 この例では、コンテンツは File タイプです。
                // ローカルファイルの完全なパスを指定します。 ローカルパスを指定しない場合、ファイルはサンプルプログラムが配置されているプロジェクトに対応するローカルパスからアップロードされます。
                //appendObjectRequest.setFile(new File("D:\\localpath\\examplefile.txt"));
                // オブジェクトのメタデータを指定します。 メタデータは、最初の追加操作に対してのみ有効です。
                //appendObjectRequest.setMetadata(meta);
    
                // 最初の追加操作。 設定したタグは、最初の追加アップロードに対してのみ有効です。
                // データの追加を開始する位置を設定します。
                appendObjectRequest.setPosition(0L);
                AppendObjectResult appendObjectResult = ossClient.appendObject(appendObjectRequest);
                // オブジェクトの 64 ビット CRC 値。
                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 (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • 再開可能なアップロード時のオブジェクトタグの追加

    次のコードは、再開可能なアップロード時にオブジェクトタグを追加する方法を示しています。

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.*;
    
    public class Demo {
        public static void main(String[] args) throws 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。
            String objectName = "exampledir/exampleobject.txt";
            // ローカルファイルの完全なパスを指定します。 ローカルパスを指定しない場合、ファイルはサンプルプログラムが配置されているプロジェクトに対応するローカルパスからアップロードされます。
            String localFile = "D:\\localpath\\examplefile.txt";
            // ローカルのマルチパートアップロードの結果を記録するファイル。 ファイルには .ucp 拡張子が必要で、localFile で指定されたローカルファイルと同じディレクトリにある必要があります。
            // アップロードが完了すると、このファイルは削除されます。
            String yourCheckpointFile = "D:\\localpath\\uploadfile.ucp";
            // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
            // OSSClient インスタンスを作成します。
            // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                // オブジェクトのタグ情報を設定します。
                Map<String, String> tags = new HashMap<String, String>();
                // オブジェクトタグのキーと値を指定します。 例: owner と Tanaka。
                tags.put("owner", "Tanaka");
                tags.put("type", "document");
    
                ObjectMetadata meta = new ObjectMetadata();
                // アップロードされたオブジェクトのコンテンツタイプを指定します。
                meta.setContentType("text/plain");
                // オブジェクトタグを設定します。
                meta.setObjectTagging(tags);
    
                // 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 の範囲である必要があります。 デフォルトのパートサイズは、オブジェクト全体のサイズの 1/10,000 です。
                uploadFileRequest.setPartSize(1 * 1024 * 1024);
                // 再開可能なアップロードを有効にします。 デフォルトでは、この機能は無効になっています。
                uploadFileRequest.setEnableCheckpoint(true);
                // ローカルのマルチパートアップロードの結果を記録するファイル。 再開可能なアップロードを有効にする場合は、このパラメーターを設定する必要があります。 アップロードの進行状況はこのファイルに保存されます。 パートのアップロードに失敗した場合、再度パートをアップロードすると、記録されたブレークポイントからアップロードが再開されます。 アップロードが完了すると、このファイルは削除されます。 デフォルトでは、ファイルはアップロードするローカルファイルと同じディレクトリにあり、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 (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

既存オブジェクトのオブジェクトタグの追加または変更

オブジェクトのアップロード時にオブジェクトタグを追加しなかった場合、または既存のタグが要件を満たさない場合は、オブジェクトのアップロード後にオブジェクトのタグを追加または変更できます。

次のコードは、既存のオブジェクトのオブジェクトタグを追加または変更する方法を示しています。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import java.util.*;

public class Demo {
    public static void main(String[] args) throws 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。
        String objectName = "exampledir/exampleobject.txt";
        // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            Map<String, String> tags = new HashMap<String, String>();
            // オブジェクトタグのキーと値を指定します。 例: owner と Tanaka。
            tags.put("owner", "Tanaka");
            tags.put("type", "document");

            // オブジェクトにタグを設定します。
            ossClient.setObjectTagging(bucketName, objectName, tags);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

オブジェクトの特定バージョンのオブジェクトタグの追加または変更

バージョン管理が有効なバケットでは、バージョン ID を指定して、オブジェクトの特定のバージョンのオブジェクトタグを追加または変更できます。

バージョン管理が有効なバケットでは、バージョン ID を指定することで、オブジェクトの特定バージョンのオブジェクトタグを追加または変更できます。

説明

バージョン ID の取得方法の詳細については、「オブジェクトの一覧表示 (Java SDK V1)」をご参照ください。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.SetObjectTaggingRequest;
import java.util.*;

public class Demo {
    public static void main(String[] args) throws 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。
        String objectName = "exampledir/exampleobject.txt";
        // オブジェクトのバージョン ID を指定します。 例: CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****。
        String versionId = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****";
        // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            Map<String, String> tags = new HashMap<String, String>(1);
            // オブジェクトタグのキーと値を指定します。 例: owner と Tanaka。
            tags.put("owner", "Tanaka");
            tags.put("type", "document");

            SetObjectTaggingRequest setObjectTaggingRequest = new SetObjectTaggingRequest(bucketName, objectName, tags);
            setObjectTaggingRequest.setVersionId(versionId);
            ossClient.setObjectTagging(setObjectTaggingRequest);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

オブジェクトのコピー時のオブジェクトタグの設定

オブジェクトをコピーするときに、コピー先オブジェクトのタグをどのように設定するかを指定できます。 有効な値は次のとおりです:

  • コピー (デフォルト):コピー元オブジェクトのタグをコピー先オブジェクトにコピーします。

  • 置換:コピー元オブジェクトのタグを無視し、リクエストで指定されたタグをコピー先オブジェクトに適用します。

次のコードは、1 GB 未満のオブジェクトに対するシンプルコピー操作と、1 GB 以上のオブジェクトに対するマルチパートコピー操作を使用してオブジェクトをコピーするときに、オブジェクトタグを設定する方法の例を示しています。

  • シンプルコピー時のオブジェクトタグの設定

    次のコードは、1 GB 未満のオブジェクトをコピーするときにオブジェクトタグを設定する方法の例を示しています。

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.internal.OSSHeaders;
    import com.aliyun.oss.model.CopyObjectRequest;
    import com.aliyun.oss.model.CopyObjectResult;
    import com.aliyun.oss.model.TagSet;
    import java.util.*;
    
    public class Demo {
        public static void main(String[] args) throws Throwable {
            // エンドポイントを設定します。 例として、中国 (杭州) リージョンを使用します。 エンドポイントを実際のリージョンに設定します。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // コピー元バケットの名前を指定します。 例: srcexamplebucket。
            String sourceBucketName = "srcexamplebucket";
            // コピー元オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めることはできません。 例: srcexampledir/exampleobject.txt。
            String sourceObjectName = "srcexampledir/exampleobject.txt";
            // コピー先バケットの名前を指定します。 例: destexamplebucket。
            String destinationBucketName = "destexamplebucket";
            // コピー先オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めることはできません。 例: destexampledir/exampleobject.txt。
            String destinationObjectName = "destexampledir/exampleobject.txt";
            // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
            // OSSClient インスタンスを作成します。
            // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            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 (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
                        
  • マルチパートコピー時のオブジェクトタグの設定

    次のコードは、1 GB 以上のオブジェクトをコピーするときにオブジェクトタグを設定する方法の例を示しています。

    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.*;
    import java.util.*;
    
    public class Demo {
        public static void main(String[] args) throws Throwable {
            // エンドポイントを設定します。 例として、中国 (杭州) リージョンを使用します。 エンドポイントを実際のリージョンに設定します。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
            // コピー元バケットの名前を指定します。 例: srcexamplebucket。
            String sourceBucketName = "srcexamplebucket";
            // コピー元オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めることはできません。 例: srcexampledir/exampleobject.txt。
            String sourceObjectName = "srcexampledir/exampleobject.txt";
            // コピー先バケットの名前を指定します。 例: destexamplebucket。
            String destinationBucketName = "destexamplebucket";
            // コピー先オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めることはできません。 例: destexampledir/exampleobject.txt。
            String destinationObjectName = "destexampledir/exampleobject.txt";
            // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
            String region = "cn-hangzhou";
    
            // OSSClient インスタンスを作成します。
            // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
            OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)               
            .build();
    
            try {
                ObjectMetadata objectMetadata = ossClient.getObjectMetadata(sourceBucketName, sourceObjectName);
                // コピーするオブジェクトのサイズを取得します。
                long contentLength = objectMetadata.getContentLength();
                // パートサイズを 10 MB に設定します。
                long partSize = 1024 * 1024 * 10;
                // パートの総数を計算します。
                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>();
                // オブジェクトタグのキーと値を指定します。 例: owner と Suzuki。
                tags2.put("owner", "Suzuki");
                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 < partCount; i++) {
                    // 各パートのサイズを計算します。
                    long skipBytes = partSize * i;
                    long size = partSize < contentLength - skipBytes ? partSize : contentLength - skipBytes;
    
                    // 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);
                    // 返されたパートの ETag を 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 (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

シンボリックリンクのオブジェクトタグの設定

次のコードは、シンボリックリンクのオブジェクトタグを設定する方法を示しています。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import java.util.*;

public class Demo {
    public static void main(String[] args) throws 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。
        String symLink = "shortcut/myobject.txt";
        // オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めることはできません。 例: exampledir/exampleobject.txt。
        String destinationObjectName = "exampledir/exampleobject.txt";
        // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // シンボリックリンクのタグ情報を設定します。
            Map<String, String> tags = new HashMap<String, String>();
            // オブジェクトタグのキーと値を指定します。 例: owner と Tanaka。
            tags.put("owner", "Tanaka");
            tags.put("type", "document");

            // アップロードされたファイルのメタデータを作成します。
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setObjectTagging(tags);

            // 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 (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

関連ドキュメント

  • オブジェクトタグの設定に使用される完全なサンプルコードについては、GitHub をご参照ください。

  • オブジェクトタグの設定に使用される API 操作の詳細については、「PutObjectTagging」をご参照ください。