Todos os produtos
Search
Central de documentação

Object Storage Service:Converta a classe de armazenamento de um objeto usando o OSS SDK for Python 2.0

Última atualização: Sep 22, 2026

O Object Storage Service (OSS) oferece as seguintes classes de armazenamento para atender a diversos cenários, de dados quentes a dados frios: Standard, Infrequent Access (IA), Archive, Cold Archive e Deep Cold Archive. No OSS, após a criação de um objeto, não é possível modificar seu conteúdo. Para converter a classe de armazenamento de um objeto, você deve criar um novo objeto e converter a classe de armazenamento dele. Este tópico descreve como usar o OSS SDK for Python 2.0 para converter a classe de armazenamento.

Observações de uso

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

  • Para converter a classe de armazenamento de um objeto, você deve ter as permissões oss:GetObject, oss:PutObject e oss:RestoreObject. Para obter mais informações, consulte Grant custom permissions to a RAM user.

Código de exemplo

Use o método CopyObject para converter a classe de armazenamento

Use o método CopyObject para converter a classe de armazenamento de um objeto de Standard para Archive.

import argparse
import alibabacloud_oss_v2 as oss

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

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

def main():
    # Parse command-line arguments.
    args = parser.parse_args()

    # Load credentials from environment variables for identity verification.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

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

    # Set the region in the configuration.
    cfg.region = args.region

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

    # Create an OSS client based on the configurations.
    client = oss.Client(cfg)

    # Execute a request to copy the object.
    result = client.copy_object(oss.CopyObjectRequest(
        bucket=args.bucket,  # Specify the name of the destination bucket.
        key=args.key,  # Specify the key of the destination object.
        source_key=args.source_key,  # Specify the key of the source object.
        source_bucket=args.source_bucket,  # Specify the name of the source bucket.
        storage_class= "Archive", # Convert the storage class to Archive Storage.
    ))

    # Print the result 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()  # The entry point of the script. The main function is called when the file is directly run.

Use o Copier para converter a classe de armazenamento de um objeto

Use o método Copier.Copy do OSS SDK for Python 2.0 para converter a classe de armazenamento. Esse método combina as operações de cópia simples e cópia multipartida e seleciona inteligentemente a opção mais adequada com base nos parâmetros da requisição.

O código de exemplo abaixo usa o método Copier.Copy para converter a classe de armazenamento de um objeto de Standard para Archive.

import argparse
import alibabacloud_oss_v2 as oss

# Create a command-line argument parser.
parser = argparse.ArgumentParser(description="copier sample")

# Add the --region command-line argument (required) to specify the region where the bucket is located.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)

# Add the --bucket command-line argument (required) to specify the name of the destination bucket.
parser.add_argument('--bucket', help='The name of the destination bucket.', required=True)

# Add the --endpoint command-line argument (optional) to specify the endpoint of OSS.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

# Add the --key command-line argument (required) to specify the name of the destination object.
parser.add_argument('--key', help='The name of the destination object.', required=True)

# Add the --source_key command-line argument (required) to specify the name of the source object.
parser.add_argument('--source_key', help='The name of the source object.', required=True)

# Add the --source_bucket command-line argument (required) to specify the name of the source bucket.
parser.add_argument('--source_bucket', help='The name of the source bucket.', required=True)

def main():
    # Parse command-line arguments.
    args = parser.parse_args()

    # Load credentials from environment variables.
    # Use EnvironmentVariableCredentialsProvider to read the AccessKey ID and AccessKey secret from environment variables.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Use the default configurations of the SDK.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider  # Set the credentials provider.
    cfg.region = args.region  # Set the region where the bucket is located.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint  # If an endpoint is provided, set a custom endpoint.

    # Create an OSS client.
    client = oss.Client(cfg)

    # Create a Copier instance and perform the copy operation.
    copier = client.copier()

    # Perform the copy operation.
    result = copier.copy(
        oss.CopyObjectRequest(
            bucket=args.bucket,          # The name of the destination bucket.
            key=args.key,                # The name of the destination object.
            source_bucket=args.source_bucket,  # The name of the source bucket.
            source_key=args.source_key,  # The name of the source object.
            storage_class="Archive", # Convert the storage class to Archive Storage.
        )
    )

    # Print the copy result.
    # Use vars(result) to convert the result object to a dictionary and print the dictionary.
    print(vars(result))

if __name__ == "__main__":
    main()