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-hangzhouet 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 |
|
Copie des objets au sein d'un bucket ou entre des buckets situés dans la même région. |
|
|
||
|
|
Si vous spécifiez la version de l'objet source via versionId, cette autorisation est également requise. |
|
|
|
Si vous copiez les tags d'objet via x-oss-tagging, ces autorisations sont nécessaires. |
|
|
|
||
|
|
Si vous spécifiez les tags d'une version spécifique de l'objet source via versionId, cette autorisation est également requise. |
|
|
|
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. |
|
|
|
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 :
|
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(®ion, "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.