Tüm Ürünler
Search
Belge Merkezi

Object Storage Service:OSS SDK for Python 2.0 ile bir nesnenin depolama sınıfını dönüştürme

Son Güncelleme:Oct 02, 2026

Object Storage Service (OSS), sıcak verilerden soğuk verilere kadar çeşitli veri depolama senaryolarını karşılamak üzere Standard, Infrequent Access (IA), Archive, Cold Archive ve Deep Cold Archive olmak üzere aşağıdaki depolama sınıflarını sunar. OSS'de bir nesne oluşturulduktan sonra içeriği değiştirilemez. Bir nesnenin depolama sınıfını dönüştürmek istiyorsanız yeni bir nesne oluşturmanız ve depolama sınıfını bu yeni nesne üzerinde belirlemeniz gerekir. Bu konu, depolama sınıfı dönüşümü için OSS SDK for Python 2.0'ın nasıl kullanılacağını açıklar.

Kullanım notları

  • Bu konudaki örnek kod, China (Hangzhou) bölgesinin bölge kimliği olan cn-hangzhou değerini kullanır. Varsayılan olarak, bir paketteki kaynaklara erişmek için genel uç nokta kullanılır. Paketin bulunduğu aynı bölgedeki diğer Alibaba Cloud hizmetlerinden paket içindeki kaynaklara erişmek istiyorsanız dahili uç noktayı kullanın. OSS'nin desteklediği bölgeler ve uç noktalar hakkında daha fazla bilgi için bkz. Bölgeler ve uç noktalar.

  • Bir nesnenin depolama sınıfını dönüştürmek için oss:GetObject, oss:PutObject ve oss:RestoreObject izinlerine sahip olmanız gerekir. Daha fazla bilgi için bkz. RAM kullanıcıya özel izinler atama.

Örnek kod

Depolama sınıfını dönüştürmek için CopyObject yöntemini kullanma

CopyObject yöntemini kullanarak bir nesnenin depolama sınıfını Standard'dan Archive'a dönüştürebilirsiniz.

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.

Bir nesnenin depolama sınıfını dönüştürmek için Copier kullanma

OSS SDK for Python 2.0'daki Copier.Copy yöntemini kullanarak depolama sınıfını dönüştürebilirsiniz. Bu yöntem, basit kopyalama ve çok parçalı kopyalama işlemlerini birleştirir ve sağlanan istek parametrelerine göre en uygun olanı akıllıca seçer.

Aşağıda, Copier.Copy yöntemini kullanarak bir nesnenin depolama sınıfını Standard'dan Archive'a dönüştürmek için örnek kod gösterilmektedir.

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