Tous les produits
Search
Centre de documentation

Object Storage Service:Copie d'objets (SDK for Go V2)

Dernière mise à jour :Aug 25, 2026

Utilisez la méthode CopyObject du SDK for Go V2 pour copier un objet de moins de 5 GiB entre un bucket source et un bucket de destination situés dans la même région. Les buckets source et destination peuvent être identiques ou distincts.

Précautions

  • Le code exemple de cette rubrique utilise par défaut l'ID de région Chine (Hangzhou) cn-hangzhou et un endpoint public. Pour accéder à OSS depuis un autre service Alibaba Cloud dans la même région, utilisez un endpoint interne. Pour connaître la correspondance entre les régions OSS et les endpoints, consultez la page Régions et endpoints.

  • Cette rubrique utilise des variables d'environnement pour illustrer la lecture des informations d'identification. Pour savoir comment configurer les informations d'identification, consultez la section Configurer les informations d'identification.

  • La copie d'un objet nécessite une autorisation de lecture sur l'objet source ainsi que des autorisations de lecture et d'écriture sur le bucket de destination.

  • La copie interrégionale n'est pas prise en charge. Par exemple, vous ne pouvez pas copier un objet d'un bucket situé dans la région Chine (Hangzhou) vers un bucket situé dans la région Chine (Qingdao).

  • Lorsque vous copiez un objet, assurez-vous qu'aucune politique de conservation n'est configurée sur le bucket source ni sur le bucket de destination. Dans le cas contraire, l'opération échoue et renvoie l'erreur suivante : The object you specified is immutable.

Autorisations

Par défaut, un compte Alibaba Cloud dispose de toutes les autorisations. Les utilisateurs RAM ou les rôles RAM associés à un compte Alibaba Cloud ne disposent d'aucune autorisation par défaut. Le compte Alibaba Cloud ou l'administrateur du compte doit accorder les autorisations d'exploitation via des politiques RAM ou une Bucket Policy.

API

Action

Description

CopyObject

oss:GetObject

Copie des objets au sein d'un bucket ou entre des buckets situés dans la même région.

oss:PutObject

oss:GetObjectVersion

Si vous spécifiez la version de l'objet source via versionId, cette autorisation est également requise.

oss:GetObjectTagging

Si vous copiez les tags d'objet via x-oss-tagging, ces autorisations sont nécessaires.

oss:PutObjectTagging

oss:GetObjectVersionTagging

Si vous spécifiez les tags d'une version spécifique de l'objet source via versionId, cette autorisation est également requise.

kms:GenerateDataKey

Lors de la copie d'un objet, si les métadonnées de l'objet de destination contiennent X-Oss-Server-Side-Encryption: KMS, ces deux autorisations sont requises.

kms:Decrypt

Signature de la méthode

func (c *Client) CopyObject(ctx context.Context, request *CopyObjectRequest, optFns ...func(*Options)) (*CopyObjectResult, error)

Paramètres de la requête

Paramètre

Type

Description

ctx

context.Context

Le contexte de la requête. Vous pouvez l'utiliser pour définir le délai d'expiration global de la requête.

request

*CopyObjectRequest

Les paramètres de requête pour cette opération. Pour plus d'informations, consultez CopyObjectRequest

optFns

...func(*Options)

(Facultatif) Les options de configuration. Pour plus d'informations, consultez Options

Le tableau suivant décrit les paramètres courants de CopyObjectRequest :

Paramètre

Type

Description

Bucket

*string

Spécifie le nom du bucket de destination.

Key

*string

Spécifie le nom de l'objet de destination.

SourceBucket

*string

Spécifie le nom du bucket source.

SourceKey

*string

Spécifie le nom de l'objet source.

ForbidOverwrite

*string

Indique s'il faut écraser l'objet de destination portant le même nom lors de l'opération CopyObject.

Tagging

*string

Spécifie les tags de l'objet. Vous pouvez spécifier plusieurs tags simultanément, par exemple TagA=A&TagB=B.

TaggingDirective

*string

Spécifie la manière de définir les tags de l'objet de destination. Valeurs possibles :

  • Copy (par défaut) : copie les tags de l'objet source vers l'objet de destination.

  • Replace : ignore les tags de l'objet source et utilise les tags spécifiés dans la requête.

Paramètres de la réponse

Valeur de retour

Type

Description

result

*CopyObjectResult

La valeur de retour de l'opération. Cette valeur prend effet lorsque err est nil. Pour plus d'informations, consultez CopyObjectResult

err

error

L'état de la requête. Si la requête échoue, err n'est pas nil.

Exemple de code

Utilisez l'exemple de code suivant pour copier un objet inférieur à 5 GiB d'un bucket source vers un bucket de destination.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Specify the global variables.
var (
	region         string // The region in which the bucket is located.
	srcBucketName  string // The name of the source bucket.
	srcObjectName  string // The name of the source object.
	destBucketName string // The name of the destination bucket.
	destObjectName string // The name of the destination object.
)

// Specify the init function used to initialize command line parameters.
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&srcBucketName, "src-bucket", "", "The name of the source bucket.")
	flag.StringVar(&srcObjectName, "src-object", "", "The name of the source object.")
	flag.StringVar(&destBucketName, "dest-bucket", "", "The name of the destination bucket.")
	flag.StringVar(&destObjectName, "dest-object", "", "The name of the destination object.")
}

func main() {
	// Parse the command line parameters.
	flag.Parse()

	// Check whether the source bucket name is empty.
	if len(srcBucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, source bucket name required")
	}

	// Check whether the region is empty.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// If the destination bucket name is not specified, use the source bucket name.
	if len(destBucketName) == 0 {
		destBucketName = srcBucketName
	}

	// Check whether the source object name is empty.
	if len(srcObjectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, source object name required")
	}

	// Check whether the destination object name is empty.
	if len(destObjectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, destination object name required")
	}

	// Load the default configuration and specify the credential provider and region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Create a request for copying the object.
	request := &oss.CopyObjectRequest{
		Bucket:       oss.Ptr(destBucketName), // The name of the destination bucket.
		Key:          oss.Ptr(destObjectName), // The name of the destination object.
		SourceKey:    oss.Ptr(srcObjectName),  // The name of the source object.
		SourceBucket: oss.Ptr(srcBucketName),  // The name of the source bucket.
	}

	// Perform the copy object operation and handle the result.
	result, err := client.CopyObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to copy object %v", err)
	}
	log.Printf("copy object result:%#v\n", result)
}

Références

  • Pour obtenir le code exemple complet relatif à la copie d'objets, consultez exemple GitHub.

  • Pour l'opération API utilisée pour copier des objets, consultez CopyObject.