设置对象标签
本文介绍如何设置对象标签(Object Tagging)。
对象标签使用一组键值对(Key-Value)来标记对象。对象标签的详情请参考开发指南的对象标签。
说明
- 您可以在上传Object时设置对象标签,也可以对已上传Object设置对象标签。设置对象标签时,若对象已有标签,则覆盖原标签。设置对象标签的详情请参考PutObjectTagging。
- 设置对象标签时要求请求者有PutObjectTagging权限。
- 更改标签时不会更新Object的Last‑Modified时间。
- 标签合法字符集包括大小写字母、数字、空格和以下符号:
+‑=._:/
上传Object时添加对象标签
- 普通上传时添加对象标签
以下代码用于普通上传时添加对象标签:
package main import ( "fmt" "os" "strings" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 获取存储空间。 bucket, err := client.Bucket("<yourBucketName>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 设置Tagging规则。 tag1 := oss.Tag{ Key: "key1", Value: "value1", } tag2 := oss.Tag{ Key: "key2", Value: "value2", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } // 设置Object Tagging。 err = bucket.PutObject("<yourObjectKey>", strings.NewReader("<yourObjectValue>"), oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
- 分片上传时添加对象标签
以下代码用于分片上传时添加对象标签:
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 获取存储空间。 bucket, err := client.Bucket("<yourBucketName>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 设置Tagging规则。 tag1 := oss.Tag{ Key: "key1", Value: "value1", } tag2 := oss.Tag{ Key: "key2", Value: "value2", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } // 获取待上传的文件位置和名称。 fileName := "<youFileNameAndPath>" // 将文件分成3个分片进行上传,具体分片数可以试文件大小而定。 chunks, err := oss.SplitFileByPartNum(fileName, 3) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 打开文件。 fd, err := os.Open(fileName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } defer fd.Close() // 初始化上传的文件,并设置tagging。 imur, err := bucket.InitiateMultipartUpload("<yourObjectName>", oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 分片上传。 var parts []oss.UploadPart for _, chunk := range chunks { fd.Seek(chunk.Offset, os.SEEK_SET) part, err := bucket.UploadPart(imur, fd, chunk.Size, chunk.Number) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } parts = append(parts, part) } _, err = bucket.CompleteMultipartUpload(imur, parts) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
- 追加上传时添加对象标签
以下代码用于追加上传时添加对象标签:
package main import ( "fmt" "os" "strings" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 获取存储空间。 bucket, err := client.Bucket("<yourBucketName>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 设置Tagging规则。 tag1 := oss.Tag{ Key: "key1", Value: "value1", } tag2 := oss.Tag{ Key: "key2", Value: "value2", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } var nextPos int64 // 第一次上传可追加的文件。只有第一次调用AppendObject设置的标签才会生效,后续再调用AppendObject设置的标签不生效。 nextPos, err = bucket.AppendObject("<yourObjectName>", strings.NewReader("<yourObjectValue>"), nextPos, oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 第二次上传。 nextPos, err = bucket.AppendObject("<yourObjectName>", strings.NewReader("<yourObjectAppandValue>"), nextPos) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
- 断点续传上传时添加对象标签
以下代码用于断点续传上传时添加对象标签:
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 获取存储空间。 bucket, err := client.Bucket("<yourBucketName>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 设置Tagging规则。 tag1 := oss.Tag{ Key: "key1", Value: "value1", } tag2 := oss.Tag{ Key: "key2", Value: "value2", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } // 将文件分成多个分片,每个分片大小为100KB,使用3个协程并发上传分片,上传时设置Object Tagging。 err = bucket.UploadFile("<yourObjectName>", "<yourNeedPuttingFile>", 100*1024, oss.Routines(3), oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
对已上传Object添加或更改对象标签
以下代码用于对已上传Object添加或更改对象标签:
package main
import (
"fmt"
"os"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 获取存储空间。
bucket, err := client.Bucket("<yourBucketName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 设置Tagging规则。
tag1 := oss.Tag{
Key: "key1",
Value: "value1",
}
tag2 := oss.Tag{
Key: "key2",
Value: "value2",
}
tagging := oss.Tagging{
Tags: []oss.Tag{tag1, tag2},
}
// 设置Object Tagging。
err = bucket.PutObjectTagging("<yourObjectName>", tagging)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
拷贝Object时设置对象标签
拷贝Object时,可以指定如何设置目标Object的对象标签。取值如下:
- Copy(默认值):复制源Object的对象标签到目标 Object。
- Replace:忽略源Object的对象标签,直接采用请求中指定的对象标签。
以下分别提供了简单拷贝1GB以下的Object、及分片拷贝1GB以上的Object时设置对象标签的详细示例。
-
以下代码用于简单拷贝1GB以下的Object时设置对象标签:
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 获取存储空间。 bucket, err := client.Bucket("<yourBucketName>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 设置Tagging规则。 tag1 := oss.Tag{ Key: "key1", Value: "value1", } tag2 := oss.Tag{ Key: "key2", Value: "value2", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } // 复制object时只设置tagging参数,Object Tagging不生效。 _, err = bucket.CopyObject("<yourSourceObjectName>", "<yourDirectObjectName>", oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 复制object时需同时设置TaggingReplace及tagging两个参数,Object Tagging才生效。 _, err = bucket.CopyObject("<yourSourceObjectName>", "<yourDirectObjectName>", oss.SetTagging(tagging), oss.TaggingDirective(oss.TaggingReplace)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
- 以下代码用于分片拷贝1GB以上的的Object时设置对象标签:
package main import ( "fmt" "os" "strings" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 创建OSSClient实例。 client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 获取存储空间。 bucket, err := client.Bucket("<yourBucketName>") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 设置Tagging规则。 tag1 := oss.Tag{ Key: "key1", Value: "value1", } tag2 := oss.Tag{ Key: "key2", Value: "value2", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } // 上传一个object,用于分片拷贝。 content := "this your object value" err = bucket.PutObject("<yourObjectName>", strings.NewReader(content)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // 初始化上传的文件,文件名是<desObjectName>,并设置tagging。 imur, err := bucket.InitiateMultipartUpload("<desObjectName>", oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // yourSourObject表示拷贝的源Object。将Object分成1个分片进行上传。 part, err := bucket.UploadPartCopy(imur, "<yourBucketName>", "<yourSourObject>", 0, int64(len(content)), 1) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } parts := []oss.UploadPart{part} _, err = bucket.CompleteMultipartUpload(imur, parts) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
为软链接文件设置标签
以下代码用于为软链接文件设置标签:
package main
import (
"fmt"
"os"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 获取存储空间。
bucket, err := client.Bucket("<yourBucketName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 设置Tagging规则。
tag1 := oss.Tag{
Key: "key1",
Value: "value1",
}
tag2 := oss.Tag{
Key: "key2",
Value: "value2",
}
tagging := oss.Tagging{
Tags: []oss.Tag{tag1, tag2},
}
err = bucket.PutObject("<yourObjectName>", strings.NewReader("<yourObjectValue>"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
err = bucket.PutSymlink("<yourObjectName>", "<yourObjectSymLinkName>", oss.SetTagging(tagging))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论