Tous les produits
Search
Centre de documentation

Object Storage Service:Gérer les métadonnées d'objet (OSS SDK for Go 1.0)

Dernière mise à jour :Sep 22, 2026

Les objets stockés dans Object Storage Service (OSS) se composent de clés, de données et de métadonnées d'objet. Les métadonnées d'objet décrivent l'objet et incluent des en-têtes HTTP standard ainsi que des métadonnées utilisateur. Configurez les en-têtes HTTP standard pour créer des politiques de requête HTTP personnalisées, telles que des politiques de mise en cache ou de téléchargement forcé d'objets. Définissez les métadonnées utilisateur d'un objet pour identifier ses finalités ou attributs.

Notes

  • Cette rubrique utilise le point de terminaison public de la région Chine (Hangzhou). Pour accéder à OSS depuis d'autres services Alibaba Cloud situés dans la même région, utilisez un point de terminaison interne. Pour plus d'informations sur les régions et points de terminaison OSS, consultez Régions et points de terminaison.

  • Dans cette rubrique, les identifiants d'accès sont obtenus à partir des variables d'environnement. Pour savoir comment configurer les identifiants d'accès, consultez Configurer les identifiants d'accès.

  • Cette rubrique illustre la création d'une instance OSSClient avec un endpoint OSS. Pour d'autres configurations, comme l'utilisation d'un domaine personnalisé ou l'authentification via des identifiants du Security Token Service (STS), consultez Configurer un client (Go SDK V1).

  • Pour configurer les métadonnées d'objet, vous devez disposer de l'autorisation oss:PutObject. Pour interroger les métadonnées d'objet, vous devez disposer de l'autorisation oss:GetObject. Pour plus d'informations, consultez Accorder une politique personnalisée.

Exemple de code

Configurer les métadonnées d'objet lors du chargement d'un objet

Avertissement

Lorsque vous chargez des objets dans OSS, si un objet portant le même nom existe déjà, OSS écrase l'objet existant par celui que vous chargez. Avant de configurer les métadonnées d'objet via un chargement, assurez-vous qu'aucun objet du même nom ne figure dans le bucket de destination afin d'éviter tout écrasement accidentel. Pour savoir comment empêcher l'écrasement d'objets portant le même nom, consultez Empêcher l'écrasement d'objets portant le même nom.

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)
}

Modifier les métadonnées d'objet

...

// 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)

Interroger les métadonnées d'objet

...

// 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)         

FAQ

Lors du chargement d'un objet dans un bucket avec définition simultanée de ses métadonnées, comment empêcher l'écrasement d'un objet existant portant le même nom ?

Utilisez l'une des méthodes suivantes pour éviter l'écrasement d'objets portant le même nom dans le bucket :

  • Activer le versioning

    Si vous activez le versioning pour le bucket, OSS conserve l'objet existant portant le même nom en tant que version précédente et stocke l'objet chargé comme version actuelle. Vous pouvez restaurer les versions précédentes à tout moment. Pour plus d'informations, consultez Activer le contrôle de version.

  • Inclure l'en-tête x-oss-forbid-overwrite dans la requête de chargement

    Incluez l'en-tête x-oss-forbid-overwrite dans la requête de chargement et définissez-le sur true. Si vous chargez un objet portant le même nom qu'un objet existant, le chargement échoue et OSS renvoie l'erreur FileAlreadyExists. Pour plus d'informations, consultez PutObject.

Références

  • Pour consulter l'exemple de code complet utilisé pour interroger les métadonnées d'objet, rendez-vous sur GitHub.

  • Pour plus d'informations sur l'opération API permettant de configurer les métadonnées d'objet lors d'un chargement simple, consultez PutObject.

  • Pour plus d'informations sur l'opération API permettant de modifier les métadonnées d'un objet existant, consultez CopyObject.

  • Pour plus d'informations sur les opérations API permettant d'interroger les métadonnées d'objet, consultez GetObjectMeta et HeadObject.