设置对象标签

  • PutObjectTagging

PutObjectTagging操作可以为对象设置标签,标签是一个键值对,每个对象最多可以有10个标签。bucket的拥有者默认拥有给bucket中的对象设置标签的权限,并且可以将权限授予其他用户。

每次执行PutObjectTagging操作会覆盖对象已有的标签信息。每个对象最多可以设置10个标签,标签Key和Value区分大小写,并且Key不可重复。每个标签的Key长度不超过128字节,Value长度不超过256字节。通过HTTP header的方式设置标签且标签中包含任意字符时,需要对标签的Key和Value做URL编码。设置对象标签信息不回更新对象的最新更改时间。

代码示例:

// 添加对象标签
func PutObjectTagging(svc *s3.S3) {
    putObjectTaggingInput := &s3.PutObjectTaggingInput{
        Bucket: aws.String("exampleBucket"),
        Key:    aws.String("exampleKey"),
        Tagging: &s3.Tagging{
            TagSet: []*s3.Tag{
                {
                    Key:   aws.String("Key1"),
                    Value: aws.String("Value1"),
                },
                {
                    Key:   aws.String("Key2"),
                    Value: aws.String("Value2"),
                },
            },
        },
    }
    putObjectTaggingOutput, err := svc.PutObjectTagging(putObjectTaggingInput)
    if err != nil {
        fmt.Printf("fail to put object tagging. %v\n", err)
        return
    }
    fmt.Println(putObjectTaggingOutput)
}

PutObjectTaggingInput可设置的参数如下:

参数 类型 说明 是否必要
Bucket *string 执行本操作的桶名称。
Key *string 设置标签信息的对象的key。
Tagging *Tagging 设置的标签信息,包含了一个Tag结构体的数组,每个Tag以Key-Value的形式说明了标签的内容。
VersionId *string 设置标签信息的对象的版本Id
  • PutObjectTaggingRequest

PutObjectTaggingRequest操作首先生成一个"request.Request"对象,该对象是一个执行PutObjectTaggingRequest操作的请求。通过调用Request对象的Send方法来设置对象的标签信息。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

代码示例:

func PutObjectTaggingRequest(svc *s3.S3) {
    putObjectTaggingInput := &s3.PutObjectTaggingInput{
        Bucket: aws.String("exampleBucket"),
        Key:    aws.String("exampleKey"),
        Tagging: &s3.Tagging{
            TagSet: []*s3.Tag{
                {
                    Key:   aws.String("Key1"),
                    Value: aws.String("Value1"),
                },
                {
                    Key:   aws.String("Key2"),
                    Value: aws.String("Value2"),
                },
            },
        },
    }
    req, resp := svc.PutObjectTaggingRequest(putObjectTaggingInput)

    err := req.Send()
    if err != nil {
        fmt.Printf("fail to put object tagging. %v\n", err)
    } else {
        fmt.Println(resp)
    }
}

响应结果:

HTTP状态 响应码 描述
200 Success 操作成功。
400 InvalidBucketName 请求中设置桶的名字不合法。
400 InvalidObjectName 请求中设置对象的名字不合法
400 InvalidTag 设置标签数量太多或者标签内容长度超出限制。
400 MalformedXML 设置标签的内容非法,例如key存在重复的情况。
403 AccessDenied 用户没有权限执行操作。
404 NoSuchBucket 请求参数中设置的桶不存在。
404 NoSuchKey 请求参数中设置的对象key或者版本Id不存在。