

# 管理对象标签
<a name="tagging-managing"></a>

本节介绍如何使用适用于 Java 和 .NET 的 Amazon 开发工具包或 Amazon S3 控制台管理对象标签。

对象标签为您提供了对通用存储桶中的存储进行分类的方法。每个标签都是遵循以下规则的键值对：
+ 您最多可以将 10 个标签与对象关联。与对象关联的标签必须具有唯一的标签键。
+ 标签键的长度最大可以为 128 个 Unicode 字符，标签值的长度最大可以为 256 个 Unicode 字符。Amazon S3 对象标签在内部以 UTF-16 表示。请注意，采用 UTF-16 时，字符占用 1 或 2 个字符位置。
+ 键和值区分大小写。

有关对象标签的更多信息，请参阅 [使用标签对对象进行分类](object-tagging.md)。有关标签限制的更多信息，请参阅《*Amazon 账单与成本管理 用户指南*》中的[用户定义的标签限制](https://docs.amazonaws.cn/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html)。

## 使用 S3 控制台
<a name="add-object-tags"></a>

**向对象添加标签**

1. 登录到 Amazon Web Services 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.amazonaws.cn/s3/)。

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在存储桶列表中，选择包含对象的存储桶的名称。

1. 选中待更改对象的名称左侧的复选框。

1. 在**操作**菜单上选择**编辑标签**。

1. 查看列出的对象，然后选择**添加标签**。

1. 每个对象标签都是一个键值对。输入 **Key (键)** 和 **Value (值)**。要添加另一个标签，请选择 **Add Tag (添加标签)**。

   您最多可以为一个对象输入 10 个标签。

1. 选择**保存更改**。

   Amazon S3 会将标签添加给指定对象。

有关更多信息，另请参阅本指南中的 [在 Amazon S3 控制台中查看对象属性](view-object-properties.md) 和 [上传对象](upload-objects.md)。

## 使用 Amazon 开发工具包
<a name="tagging-manage-sdk"></a>

------
#### [ Java ]

要使用适用于 Java 的 Amazon SDK 管理对象标签，可以为新对象设置标签，并检索或替换现有对象的标签。有关对象标签的更多信息，请参阅[使用标签对对象进行分类](object-tagging.md)。

使用 S3Client 将对象上传到存储桶并设置标签。有关示例，请参阅《Amazon S3 API Reference》**中的 [Upload an object to a bucket](https://docs.amazonaws.cn/AmazonS3/latest/API/s3_example_s3_PutObject_section.html)。

------
#### [ .NET ]

以下示例演示如何使用适用于 .NET 的 Amazon SDK为新对象设置标签并检索或替换现有对象的标签。有关对象标签的更多信息，请参阅[使用标签对对象进行分类](object-tagging.md)。

有关设置和运行代码示例的信息，请参阅《适用于 .NET 的 Amazon SDK 开发人员指南》**中的[适用于 .NET 的 Amazon SDK 入门](https://docs.amazonaws.cn/sdk-for-net/latest/developer-guide/net-dg-setup.html)。

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    public class ObjectTagsTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string keyName = "*** key name for the new object ***";
        private const string filePath = @"*** file path ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            PutObjectWithTagsTestAsync().Wait();
        }

        static async Task PutObjectWithTagsTestAsync()
        {
            try
            {
                // 1. Put an object with tags.
                var putRequest = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = keyName,
                    FilePath = filePath,
                    TagSet = new List<Tag>{
                        new Tag { Key = "Keyx1", Value = "Value1"},
                        new Tag { Key = "Keyx2", Value = "Value2" }
                    }
                };

                PutObjectResponse response = await client.PutObjectAsync(putRequest);
                // 2. Retrieve the object's tags.
                GetObjectTaggingRequest getTagsRequest = new GetObjectTaggingRequest
                {
                    BucketName = bucketName,
                    Key = keyName
                };

                GetObjectTaggingResponse objectTags = await client.GetObjectTaggingAsync(getTagsRequest);
                for (int i = 0; i < objectTags.Tagging.Count; i++)
                    Console.WriteLine("Key: {0}, Value: {1}", objectTags.Tagging[i].Key, objectTags.Tagging[i].Value);


                // 3. Replace the tagset.

                Tagging newTagSet = new Tagging();
                newTagSet.TagSet = new List<Tag>{
                    new Tag { Key = "Key3", Value = "Value3"},
                    new Tag { Key = "Key4", Value = "Value4" }
                };


                PutObjectTaggingRequest putObjTagsRequest = new PutObjectTaggingRequest()
                {
                    BucketName = bucketName,
                    Key = keyName,
                    Tagging = newTagSet
                };
                PutObjectTaggingResponse response2 = await client.PutObjectTaggingAsync(putObjTagsRequest);

                // 4. Retrieve the object's tags.
                GetObjectTaggingRequest getTagsRequest2 = new GetObjectTaggingRequest();
                getTagsRequest2.BucketName = bucketName;
                getTagsRequest2.Key = keyName;
                GetObjectTaggingResponse objectTags2 = await client.GetObjectTaggingAsync(getTagsRequest2);
                for (int i = 0; i < objectTags2.Tagging.Count; i++)
                    Console.WriteLine("Key: {0}, Value: {1}", objectTags2.Tagging[i].Key, objectTags2.Tagging[i].Value);

            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine(
                        "Error encountered ***. Message:'{0}' when writing an object"
                        , e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(
                    "Encountered an error. Message:'{0}' when writing an object"
                    , e.Message);
            }
        }
    }
}
```

------