Todos os produtos
Search
Central de documentação

Object Storage Service:Copiar objetos usando o OSS SDK for Python 2.0

Última atualização: Sep 22, 2026

Este tópico descreve como usar o método CopyObject do OSS SDK for Python versão 2.0 para copiar um objeto com tamanho inferior a 5 GiB de um bucket de origem para um bucket de destino na mesma região. O bucket de destino pode ser o bucket de origem ou um bucket diferente.

Observações

  • O código de exemplo deste tópico usa o ID de região cn-hangzhou da região China (Hangzhou). Por padrão, o acesso aos recursos de um bucket ocorre pelo endpoint público. Para acessar recursos no bucket por meio de outros serviços da Alibaba Cloud na mesma região do bucket, use o endpoint interno. Para mais informações sobre as regiões e os endpoints do OSS, consulte Regions and endpoints.

  • Para copiar um objeto, são necessárias permissões de leitura no objeto de origem, além de permissões de leitura e gravação no bucket de destino.

  • Os buckets de origem e de destino devem estar na mesma região. Por exemplo, objetos de um bucket na região China (Hangzhou) não podem ser copiados para um bucket na região China (Qingdao).

  • Certifique-se de que não haja políticas de retenção configuradas para os buckets de origem e de destino. Caso contrário, o sistema retornará a seguinte mensagem de erro: The object you specified is immutable.

Permissões

Por padrão, uma conta Alibaba Cloud tem permissões totais. Usuários ou funções RAM vinculados a uma conta Alibaba Cloud não têm permissões por padrão. A conta Alibaba Cloud ou o administrador da conta deve conceder as permissões de operação por meio de RAM policies ou Bucket Policy.

API

Ação

Descrição

CopyObject

oss:GetObject

Copia objetos dentro de um bucket ou entre buckets na mesma região.

oss:PutObject

oss:GetObjectVersion

Se você especificar a versão do objeto de origem por meio do versionId, essa permissão também será necessária.

oss:GetObjectTagging

Se você copiar as tags do objeto por meio do x-oss-tagging, essas permissões serão necessárias.

oss:PutObjectTagging

oss:GetObjectVersionTagging

Se você especificar as tags de uma versão específica do objeto de origem por meio do versionId, essa permissão também será necessária.

kms:GenerateDataKey

Ao copiar um objeto, se os metadados do objeto de destino contiverem X-Oss-Server-Side-Encryption: KMS, essas duas permissões serão necessárias.

kms:Decrypt

Método

copy_object(request: CopyObjectRequest, **kwargs) → CopyObjectResult

Parâmetros da requisição

Parâmetro

Tipo

Descrição

request

CopyObjectRequest

O parâmetro da requisição. Para mais informações, consulte CopyObjectRequest.

Parâmetros comuns de CopyObjectRequest

Parâmetro

Tipo

Descrição

bucket

str

O nome do bucket de destino.

key

str

O nome do objeto de destino.

source_bucket

str

O nome do bucket de origem.

source_key

str

O nome do objeto de origem.

forbid_overwrite

str

Especifica se a operação CopyObject sobrescreve um objeto existente com o mesmo nome.

tagging

str

As tags do objeto de destino. É possível configurar várias tags para o objeto de destino. Exemplo: TagA=A&TagB=B.

tagging_directive

str

O método usado para configurar as tags no objeto de destino. Valores válidos:

  • Copy (padrão): as tags do objeto de origem são copiadas para o objeto de destino.

  • Replace: as tags especificadas na requisição são configuradas no objeto de destino.

Parâmetros de resposta

Tipo

Descrição

CopyObjectResult

O valor de retorno. Para mais informações, consulte CopyObjectResult

Para a definição completa do método de cópia de objetos, consulte copy_object.

Código de exemplo

O código de exemplo a seguir mostra como copiar um objeto com tamanho inferior a 5 GiB de um bucket de origem para um bucket de destino:

import argparse
import alibabacloud_oss_v2 as oss

# Create a command line parameter parser.
parser = argparse.ArgumentParser(description="copy object sample")

# Specify the --region parameter to indicate the region in which the bucket is located. This parameter is required.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# Specify the --bucket parameter, which specifies the name of the destination bucket. This parameter is required.
parser.add_argument('--bucket', help='The name of the destination bucket.', required=True)
# Specify the --endpoint parameter to indicate the endpoint of the region in which the bucket is located. This parameter is optional.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# Specify the --key parameter, which specifies the name of the destination object. This parameter is required.
parser.add_argument('--key', help='The name of the destination object.', required=True)
# Specify the --source_key parameter, which specifies the name of the source object. This parameter is required.
parser.add_argument('--source_key', help='The name of the source object.', required=True)
# Specify the --source_bucket parameter, which specifies the name of the source bucket. This parameter is required.
parser.add_argument('--source_bucket', help='The name of the source bucket.', required=True)

def main():
    # Parse the command line parameters.
    args = parser.parse_args()

    # Obtain access credentials from environment variables for authentication.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Load the default configurations of the SDK and specify the credential provider.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Specify the region in which the bucket is located.
    cfg.region = args.region

    # If the endpoint parameter is provided, specify the endpoint.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Use the configurations to create an OSSClient instance.
    client = oss.Client(cfg)

    # Copy objects.
    result = client.copy_object(oss.CopyObjectRequest(
        bucket=args.bucket,  # The name of the destination bucket.
        key=args.key,  # The key name of the destination object.
        source_key=args.source_key,  # The key name of the source object.
        source_bucket=args.source_bucket,  # The name of the source bucket.
    ))

    # Output the result information of the copy operation.
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' version id: {result.version_id},'
          f' hash crc64: {result.hash_crc64},'
          f' source version id: {result.source_version_id},'
          f' server side encryption: {result.server_side_encryption},'
          f' server side data encryption: {result.server_side_data_encryption},'
          f' last modified: {result.last_modified},'
          f' etag: {result.etag},'
    )

# Call the main function when the script is directly run.
if __name__ == "__main__":
    main()  # Specify the entry points in the main function of the script when the script is directly run.

Referências

  • Para o código de exemplo completo de cópia de objetos, consulte copy_object.py.