Object Storage Service (OSS) le permite configurar etiquetas en los objetos para clasificarlos. Con base en estas etiquetas, puede configurar reglas de ciclo de vida y controlar el acceso a los objetos.
Notas
En este tema se utiliza el endpoint público de la región China (Hangzhou). Si necesita acceder a OSS desde otros servicios de Alibaba Cloud ubicados en la misma región que OSS, utilice un endpoint interno. Para obtener más información sobre las regiones y los endpoints de OSS, consulte Regions and endpoints.
Las credenciales de acceso de este tema se obtienen de variables de entorno. Para conocer cómo configurar las credenciales de acceso, consulte Configure access credentials.
Este tema muestra cómo crear una instancia de OSSClient con un endpoint de OSS. Para otras configuraciones, como usar un dominio personalizado o autenticarse con credenciales de Security Token Service (STS), consulte Configure a client (Go SDK V1).
Para agregar una etiqueta a un objeto, debe contar con el permiso
oss:PutObjectTagging. Para obtener más información, consulte Grant a custom policy.
Agregar etiquetas a un objeto durante la carga
-
Agregar etiquetas mediante una carga simple
A continuación se muestra un ejemplo de código para agregar etiquetas a un objeto durante una carga simple:
package main import ( "fmt" "os" "strings" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // Obtain access credentials from environment variables. Before you run the code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" // Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. objectName := "exampledir/exampleobject.txt" // Obtain the bucket information. bucket, err := client.Bucket(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the key and the value of the object tag. For example, set the key to owner and the value to John. tag1 := oss.Tag{ Key: "owner", Value: "John", } tag2 := oss.Tag{ Key: "type", Value: "document", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } // Add tags to the object. err = bucket.PutObject(objectName, strings.NewReader("Hello OSS"), oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } fmt.Println(bucket.GetObjectTagging(objectName)) } -
Agregar etiquetas mediante una carga por partes
El siguiente fragmento de código ilustra cómo agregar etiquetas a un objeto cuando lo carga mediante una carga por partes:
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // Obtain access credentials from environment variables. Before you run the code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" // Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. objectName := "exampledir/exampleobject.txt" // Specify the full path of the local file. Example: D:\\localpath\\examplefile.txt. // If you specify only the name of the local file such as examplefile.txt without specifying the local path, the local file is uploaded from the path of the project to which the sample program belongs. fileName := "D:\\localpath\\examplefile.txt" // Obtain the bucket information. bucket, err := client.Bucket(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the key and the value of the object tag. For example, set the key to owner and the value to John. tag1 := oss.Tag{ Key: "owner", Value: "John", } tag2 := oss.Tag{ Key: "type", Value: "document", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } // You can split an object into multiple parts for upload based on the object size. In this example, the object is split into three parts. chunks, err := oss.SplitFileByPartNum(fileName, 3) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Open the object. fd, err := os.Open(fileName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } defer fd.Close() // Initialize the uploaded object and configure object tagging. imur, err := bucket.InitiateMultipartUpload(objectName, oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Start the multipart upload task. 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) } fmt.Println(bucket.GetObjectTagging(objectName)) } -
Agregar etiquetas mediante una carga por anexión
Este ejemplo de código detalla cómo agregar etiquetas a un objeto al cargarlo mediante una carga por anexión:
package main import ( "fmt" "os" "strings" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // Obtain access credentials from environment variables. Before you run the code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" // Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. objectName := "exampledir/exampleobject.txt" // Obtain the bucket information. bucket, err := client.Bucket(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the key and the value of the object tag. For example, set the key to owner and the value to John. tag1 := oss.Tag{ Key: "owner", Value: "John", } tag2 := oss.Tag{ Key: "type", Value: "document", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } var nextPos int64 // Upload the object by using append upload for the first time. When you call the AppendObject operation to add tags to an object, the tags can be added to the object only when the object is uploaded for the first time. nextPos, err = bucket.AppendObject(objectName, strings.NewReader("Hello OSS A \n"), nextPos, oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Upload the object by using append upload for the second time. nextPos, err = bucket.AppendObject(objectName, strings.NewReader("Hello OSS B \n"), nextPos) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } fmt.Println(bucket.GetObjectTagging(objectName)) } -
Agregar etiquetas mediante una carga reanudable
El código que se presenta a continuación sirve como referencia para agregar etiquetas a un objeto durante una carga reanudable:
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // Obtain access credentials from environment variables. Before you run the code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" // Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. objectName := "exampledir/exampleobject.txt" // Specify the full path of the local file. Example: D:\\localpath\\examplefile.txt. // If you specify only the name of the local file such as examplefile.txt without specifying the local path, the local file is uploaded from the path of the project to which the sample program belongs. fileName := "D:\\localpath\\examplefile.txt" // Obtain the bucket information. bucket, err := client.Bucket(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the key and the value of the object tag. For example, set the key to owner and the value to John. tag1 := oss.Tag{ Key: "owner", Value: "John", } tag2 := oss.Tag{ Key: "type", Value: "document", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } // Split the object into multiple parts, each of which is 100 KB in size. Then, use 3 threads to concurrently upload the parts, and add tags to the object when you upload the parts. err = bucket.UploadFile(objectName, fileName, 100*1024, oss.Routines(3), oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } fmt.Println(bucket.GetObjectTagging(objectName)) }
Agregar o modificar etiquetas de un objeto ya cargado
Si un objeto existente no tiene etiquetas o las que posee no cumplen con sus requerimientos, puede agregarle nuevas o modificar las actuales.
El siguiente ejemplo de código muestra cómo agregar o modificar las etiquetas de un objeto ya cargado:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain access credentials from environment variables. Before you run the code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the bucket. Example: examplebucket.
bucketName := "examplebucket"
// Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt.
objectName := "exampledir/exampleobject.txt"
// Obtain the bucket information.
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the key and the value of the object tag. For example, set the key to owner and the value to John.
tag1 := oss.Tag{
Key: "owner",
Value: "John",
}
tag2 := oss.Tag{
Key: "type",
Value: "document",
}
tagging := oss.Tagging{
Tags: []oss.Tag{tag1, tag2},
}
// Add tags to the object.
err = bucket.PutObjectTagging(objectName, tagging)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println(bucket.GetObjectTagging(objectName))
}
Agregar o modificar etiquetas de una versión específica de un objeto
Si el control de versiones está habilitado en un bucket, puede agregar o modificar las etiquetas de una versión específica de un objeto dentro de ese bucket. Para ello, especifique el identificador de versión del objeto.
El siguiente código ejemplifica cómo agregar o modificar las etiquetas de una versión determinada de un objeto.
Para conocer cómo consultar el identificador de versión de un objeto, consulte List objects (OSS SDK for Go 1.0).
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// Obtain access credentials from environment variables. Before you run the code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the bucket. Example: examplebucket.
bucketName := "examplebucket"
// Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt.
objectName := "exampledir/exampleobject.txt"
// Specify the version ID of the object.
versionId := "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****"
// Obtain the bucket information.
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// Specify the key and the value of the object tag. For example, set the key to owner and the value to John.
tag1 := oss.Tag{
Key: "owner",
Value: "John",
}
tag2 := oss.Tag{
Key: "type",
Value: "document",
}
tagging := oss.Tagging{
Tags: []oss.Tag{tag1, tag2},
}
// Add tags to the specified version of the object.
err = bucket.PutObjectTagging(objectName, tagging, oss.VersionId(versionId))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println(bucket.GetObjectTagging(objectName))
}
Agregar etiquetas a un objeto durante su copia
Al copiar un objeto, puede utilizar uno de los siguientes métodos para configurar su etiquetado:
Copy: la etiqueta del objeto de origen se copia al objeto de destino.
Replace: el objeto de destino recibe la etiqueta especificada en la solicitud en lugar de la del objeto de origen.
Los siguientes ejemplos describen cómo agregar etiquetas a un objeto menor a 1 GB en modo de copia simple y a uno mayor a 1 GB en modo de copia por partes:
-
Agregar etiquetas durante una copia simple
El siguiente código muestra cómo agregar etiquetas a un objeto de menos de 1 GB al copiarlo en modo de copia simple:
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // Obtain access credentials from environment variables. Before you run the code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" // Specify the full path of the source object. Do not include the bucket name in the full path. Example: srcexampledir/exampleobject.txt. srcObjectName := "srcexampledir/exampleobject.txt" // Specify the full path of the destination object. Do not include the bucket name in the full path. Example: destexampledir1/exampleobject.txt. destObjectName1 := "destexampledir1/exampleobject.txt" // Specify the full path of the destination object. Do not include the bucket name in the full path. Example: destexampledir2/exampleobject.txt. destObjectName2 := "destexampledir2/exampleobject.txt" // Obtain the bucket information. bucket, err := client.Bucket(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the key and the value of the object tag. For example, set the key to owner and the value to John. tag1 := oss.Tag{ Key: "owner", Value: "John", } tag2 := oss.Tag{ Key: "type", Value: "document", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } // If you configure only the tagging parameter, tags cannot be added to the destination object. _, err = bucket.CopyObject(srcObjectName, destObjectName1, oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Tags can be added to the destination object only when you configure both the TaggingReplace and tagging parameters. _, err = bucket.CopyObject(srcObjectName, destObjectName2, oss.SetTagging(tagging), oss.TaggingDirective(oss.TaggingReplace)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } fmt.Println(bucket.GetObjectTagging(srcObjectName)) fmt.Println(bucket.GetObjectTagging(destObjectName1)) fmt.Println(bucket.GetObjectTagging(destObjectName2)) } -
Agregar etiquetas durante una copia por partes
El siguiente código ilustra cómo agregar etiquetas a un objeto de más de 1 GB al copiarlo en modo de copia por partes:
package main import ( "fmt" "os" "strings" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // Obtain access credentials from environment variables. Before you run the code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" // Specify the full path of the source object. Do not include the bucket name in the full path. Example: srcexampledir/exampleobject.txt. srcObjectName := "srcexampledir/exampleobject.txt" // Specify the full path of the destination object. Do not include the bucket name in the full path. Example: destexampledir/exampleobject.txt. destObjectName := "destexampledir/exampleobject.txt" // Obtain the bucket information. bucket, err := client.Bucket(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the key and the value of the object tag. For example, set the key to owner and the value to John. tag1 := oss.Tag{ Key: "owner", Value: "John", } tag2 := oss.Tag{ Key: "type", Value: "document", } tagging := oss.Tagging{ Tags: []oss.Tag{tag1, tag2}, } // Upload an object for multipart copy. content := "this your object value" err = bucket.PutObject(srcObjectName, strings.NewReader(content)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Initialize the uploaded object and configure object tagging. imur, err := bucket.InitiateMultipartUpload(destObjectName, oss.SetTagging(tagging)) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Use the UploadPartCopy method to upload the object as one part. part, err := bucket.UploadPartCopy(imur, bucketName, srcObjectName, 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) } fmt.Println(bucket.GetObjectTagging(destObjectName)) }
Agregar etiquetas a un enlace simbólico
El siguiente código muestra cómo agregar etiquetas a un enlace simbólico:
package main
import (
"fmt"
"os"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain access credentials from environment variables. Before you run the code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the bucket. Example: examplebucket.
bucketName := "examplebucket"
// Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt.
objectName := "exampledir/exampleobject.txt"
// Specify the full path of the symbolic link. Example: shortcut/myobject.txt.
symlinkName := "shortcut/myobject.txt"
// Obtain the bucket information.
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the key and the value of the object tag. For example, set the key to owner and the value to John.
tag1 := oss.Tag{
Key: "owner",
Value: "John",
}
tag2 := oss.Tag{
Key: "type",
Value: "document",
}
tagging := oss.Tagging{
Tags: []oss.Tag{tag1, tag2},
}
err = bucket.PutObject(objectName, strings.NewReader("Hello OSS"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
err = bucket.PutSymlink(objectName, symlinkName, oss.SetTagging(tagging))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println(bucket.GetObjectTagging(objectName))
}