Todos los productos
Search
Centro de documentos

Object Storage Service:Gestión de metadatos de objetos (OSS SDK for Go 1.0)

Última actualización: Sep 03, 2026

Los objetos almacenados en Object Storage Service (OSS) se componen de claves, datos y metadatos. Los metadatos describen el objeto e incluyen encabezados HTTP estándar y metadatos de usuario. Al configurar los encabezados HTTP estándar, puede crear directivas personalizadas para solicitudes HTTP, como directivas de caché o de descarga forzada de objetos. Asimismo, puede configurar metadatos de usuario en un objeto para identificar sus atributos o propósitos específicos.

Notas

  • En este tema se utiliza el endpoint público de la región China (Hangzhou). Si desea acceder a OSS desde otros servicios de Alibaba Cloud en la misma región, utilice un endpoint interno. Para obtener más información sobre las regiones y endpoints de OSS, consulte Regions and endpoints.

  • En este tema, las credenciales de acceso se obtienen de variables de entorno. Para obtener más información sobre 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 configuraciones alternativas, como usar un dominio personalizado o autenticarse mediante credenciales de Security Token Service (STS), consulte Configure a client (Go SDK V1).

  • Para configurar los metadatos de un objeto, debe contar con el permiso oss:PutObject. Para consultar los metadatos de un objeto, debe contar con el permiso oss:GetObject. Para obtener más información, consulte Grant a custom policy.

Código de ejemplo

Configurar metadatos al cargar un objeto

Aviso

Al cargar objetos en OSS, si ya existe un objeto con el mismo nombre, OSS lo sobrescribirá con el nuevo objeto. Antes de configurar metadatos mediante la carga de un objeto, asegúrese de que el bucket de destino no contenga ningún objeto con el mismo nombre para evitar sobrescrituras accidentales. Para obtener más información sobre cómo prevenir la sobrescritura de objetos con nombres duplicados, consulte Prevent objects with the same names from being overwritten.

package main

import (
	"log"
	"strings"
	"time"

	"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 {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}

	// 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 {
		log.Fatalf("Failed to create OSS client: %v", err)
	}

	// Specify the bucket name. Example: examplebucket. 
	bucketName := "examplebucket" // Replace this parameter with the actual name of your bucket.
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Failed to get bucket: %v", err)
	}

	// Configure object metadata. Set the expiration time to 23:00:00 January 10, 2049 in GMT, access control list (ACL) to public-read, and MyProp to MyPropVal as user metadata.
	expires := time.Date(2049, time.January, 10, 23, 0, 0, 0, time.UTC)
	options := []oss.Option{
		oss.Expires(expires),
		oss.ObjectACL(oss.ACLPublicRead),
		oss.Meta("MyProp", "MyPropVal"),
	}

	// Use a data stream to upload the object. 
	// Specify the full path of the object. The full path of the object cannot contain the bucket name. Example: exampledir/exampleobject.txt. 
	objectName := "exampledir/exampleobject.txt" // Replace this parameter with the actual path of the object.
	err = bucket.PutObject(objectName, strings.NewReader("MyObjectValue"), options...)
	if err != nil {
		log.Fatalf("Failed to upload object: %v", err)
	}

	// Query object metadata. 
	props, err := bucket.GetObjectDetailedMeta(objectName)
	if err != nil {
		log.Fatalf("Failed to get object detailed metadata: %v", err)
	}
	log.Printf("Object Meta: %+v\n", props)
}

Modificar metadatos de un objeto

...

// Modify one object metadata parameter at a time. 
err = bucket.SetObjectMeta(objectName, oss.Meta("MyMeta", "MyMetaValue1"))
if err != nil {
	log.Fatalf("Failed to set single metadata: %v", err)
}

// Modify multiple object metadata parameters at a time. 
options := []oss.Option{
	oss.Meta("MyMeta", "MyMetaValue2"),
	oss.Meta("MyObjectLocation", "HangZhou"),
}
err = bucket.SetObjectMeta(objectName, options...)
if err != nil {
	log.Fatalf("Failed to set multiple metadatas: %v", err)
}

// Query object metadata. 
props, err := bucket.GetObjectDetailedMeta(objectName)
if err != nil {
	log.Fatalf("Failed to get object detailed metadata: %v", err)
}
log.Printf("Object Meta: %+v\n", props)

Consultar metadatos de un objeto

...

// Query object metadata. 
props, err := bucket.GetObjectDetailedMeta(objectName)
if err != nil {
	log.Fatalf("Failed to get object detailed metadata: %v", err)
}
log.Printf("Object Meta: %+v\n", props)         

Preguntas frecuentes

Cuando cargo un objeto en un bucket y establezco metadatos para el objeto simultáneamente, ¿cómo evito que se sobrescriba un objeto existente con el mismo nombre en el bucket?

Puede utilizar uno de los siguientes métodos para evitar que se sobrescriban objetos con el mismo nombre en el bucket:

  • Habilitar el control de versiones

    Si habilita el control de versiones para el bucket, OSS conserva el objeto existente con el mismo nombre como una versión anterior y almacena el objeto cargado como la versión actual. Puede restaurar las versiones anteriores en cualquier momento. Para obtener más información, consulte Enable version control.

  • Incluir el encabezado x-oss-forbid-overwrite en la solicitud de carga

    Incluya el encabezado x-oss-forbid-overwrite en la solicitud de carga y establezca su valor en true. Si carga un objeto con el mismo nombre que uno existente, la carga fallará y OSS devolverá el error FileAlreadyExists. Para obtener más información, consulte PutObject.

Referencias

  • Para consultar el código de ejemplo completo utilizado para obtener metadatos de objetos, visite GitHub.

  • Para obtener más información sobre la operación de API que permite configurar metadatos durante una carga simple, consulte PutObject.

  • Para obtener más información sobre la operación de API destinada a modificar los metadatos de un objeto existente, consulte CopyObject.

  • Para obtener más información sobre las operaciones de API que permiten consultar metadatos de objetos, consulte GetObjectMeta y HeadObject.