Tüm Ürünler
Search
Belge Merkezi

Object Storage Service:Ekleme yüklemesi (Python SDK V2)

Son Güncelleme:Oct 02, 2026

Ekleme yüklemesi, mevcut bir eklenebilir nesnenin sonuna veri eklemenize olanak tanır. Bu konuda, OSS SDK for Python V2 kullanarak ekleme yüklemesinin nasıl yapılacağı açıklanmaktadır.

Dikkat edilmesi gerekenler

  • Bu konudaki örnek kodlar, bölge kimliği cn-hangzhou olan Çin (Hangzhou) bölgesini örnek alır. Varsayılan olarak genel bir uç nokta kullanılır. OSS ile aynı bölgedeki diğer Alibaba Cloud hizmetlerinden OSS'ye erişmek istiyorsanız dahili bir uç nokta kullanmanız gerekir. OSS bölgeleri ve uç noktaları arasındaki eşleştirmeler hakkında daha fazla bilgi için bkz. OSS regions and endpoints.

  • Nesne yoksa ekleme yükleme yöntemini çağırmak eklenebilir bir nesne oluşturur.

  • Nesne mevcutsa:

    • Nesne eklenebilir bir nesneyse ve belirtilen ekleme konumu nesnenin mevcut uzunluğuyla aynıysa içerik nesnenin sonuna eklenir.

    • Nesne eklenebilir bir nesneyse ancak belirtilen ekleme konumu nesnenin mevcut uzunluğuyla aynı değilse PositionNotEqualToLength özel durumu oluşur.

    • Nesne basit yükleme kullanılarak yüklenen normal bir nesne gibi eklenebilir bir nesne değilse ObjectNotAppendable özel durumu oluşur.

İzinler

Varsayılan olarak bir Alibaba Cloud hesabı tam izinlere sahiptir. Bir Alibaba Cloud hesabı altındaki RAM kullanıcıları veya RAM rolleri varsayılan olarak herhangi bir izne sahip değildir. Alibaba Cloud hesabı veya hesap yöneticisi, işlem izinlerini RAM policies veya Bucket Policy aracılığıyla vermelidir.

API

Eylem

Açıklama

AppendObject

oss:PutObject

Bir nesneyi mevcut bir nesneye ekleyerek yüklemek için bu işlemi çağırabilirsiniz.

oss:PutObjectTagging

Bir nesneyi mevcut bir nesneye ekleyerek yüklerken x-oss-tagging aracılığıyla nesne etiketleri belirtiyorsanız bu izin gereklidir.

Yöntem tanımları

Ekleme yükleme senaryoları için Python SDK V2, bir paket içindeki nesnelerde dosya okuma ve yazma işlemlerini simüle etmek üzere AppendFile yöntemini ekler. Aşağıdaki tabloda AppendFile ve AppendObject yöntemleri açıklanmaktadır.

Yöntem

Açıklama

AppendFile

AppendObject yöntemiyle aynı özellikleri sunar.

Arıza sonrası yeniden iletimler için hata toleransını optimize eder.

AppendObject

Ekleme yüklemesi yapar. Son nesne boyutu en fazla 5 GiB olabilir.

CRC-64 veri doğrulamayı destekler (varsayılan olarak etkindir).

İlerleme çubuklarını destekler.

AppendFile: Premium Edition'ın ekleme yükleme API'si

Verileri ekleme modunda yüklemek için AppendFile yöntemini çağırabilirsiniz. Nesne yoksa eklenebilir bir nesne oluşturulur. Nesne varsa ancak eklenebilir bir nesne değilse hata döndürülür.

Aşağıdaki kod, AppendFile yönteminin tanımını göstermektedir.

append_file(bucket: str, key: str, request_payer: str | None = None, create_parameter: AppendObjectRequest | None = None, **kwargs) → AppendOnlyFile

İstek parametreleri


Parametre


Tür


Açıklama


bucket


str


Paket adı.


key


str


Nesne adı.


RequestPayer


str


İsteyen öder modu etkinleştirildiyse bu parametreyi 'requester' olarak ayarlayın.


CreateParameter


AppendObjectRequest


İlk yükleme için ayarlanan nesne meta verileri; ContentType, Metadata, izinler ve depolama sınıfını içerir. Daha fazla bilgi için bkz. AppendObjectRequest.

Dönüş değerleri


Tür


Açıklama


AppendOnlyFile


Eklenebilir dosya örneği. Daha fazla bilgi için bkz. AppendOnlyFile.

Aşağıdaki tabloda AppendOnlyFile sınıfında bulunan yöntemler açıklanmaktadır.


Yöntem


Açıklama


Close()


Dosya tanıtıcısını kapatır ve kaynakları serbest bırakır.


write(b)


Bayt verilerini dosyaya yazar ve yazılan bayt sayısını döndürür.


write_from(b: str | bytes | Iterable[bytes] | IO[str] | IO[bytes])


Her türlü veriyi dosyaya yazar ve yazılan bayt sayısını döndürür.

AppendFile yönteminin tam tanımı için bkz. append_file.

AppendObject: Basic Edition'ın ekleme yükleme API'si

append_object(request: AppendObjectRequest, **kwargs) → AppendObjectResult

İstek parametreleri


Parametre


Tür


Açıklama


request


AppendObjectRequest


İstek parametreleri. Daha fazla bilgi için bkz. AppendObjectRequest.

Dönüş değerleri


Tür


Açıklama


AppendObjectResult


Dönüş değeri. Daha fazla bilgi için bkz. AppendObjectResult.

AppendObject yönteminin tam tanımı için bkz. append_object.

Örnekler

(Önerilen) Ekleme yüklemesi yapmak için AppendFile kullanma

import argparse
import alibabacloud_oss_v2 as oss

# Create a command-line argument parser and describe the purpose of the script: This example shows how to append data to an OSS object.
parser = argparse.ArgumentParser(description="append file 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 bucket to operate on. This argument is required.
parser.add_argument('--bucket', help='The name of the 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 key of the object (file) in OSS. This argument is required.
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    # Parse the command-line arguments to obtain the user-provided values.
    args = parser.parse_args()

    # Load the authentication information required to access OSS from environment variables for identity verification.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Create a configuration object using the default configurations of the SDK and set the credential provider.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # If a custom endpoint is provided, update the endpoint property in the configuration object.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Initialize the OSS client with the preceding configurations to prepare for interaction with OSS.
    client = oss.Client(cfg)

    # Define the data to be appended.
    data1 = b'hello'
    data2 = b' world. '

    # Append data for the first time.
    with client.append_file(bucket=args.bucket, key=args.key) as f:
        append_f = f
        f.write(data1)
    # Print the file status after the first append operation.
    print(f'closed: {append_f.closed},'
          f' name: {append_f.name}'
    )

    # Append data for the second time.
    with client.append_file(bucket=args.bucket, key=args.key) as f:
        append_f = f
        f.write(data2)
    # Print the file status after the second append operation.
    print(f'closed: {append_f.closed},'
          f' name: {append_f.name}'
    )

    # Obtain the content of the object after appending data.
    result = client.get_object(oss.GetObjectRequest(
        bucket=args.bucket,
        key=args.key,
    ))
    # Print the result of obtaining the object.
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content: {result.body.content.decode("utf-8")}'
    )

# When this script is executed directly, call the main function to start the processing logic.
if __name__ == "__main__":
    main()  # The entry point of the script, where the program flow starts.

Ekleme yüklemesi yapmak için AppendObject kullanma

import argparse
import alibabacloud_oss_v2 as oss

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

# Add command-line arguments.
# --region: Specifies the region where the OSS bucket is located.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# --bucket: Specifies the name of the bucket to operate on.
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# --endpoint: An optional parameter that specifies the domain name used to access the OSS service.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# --key: Specifies the key of the object (file) in OSS.
parser.add_argument('--key', help='The name of the object.', required=True)

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

    # Load the authentication information required for OSS from environment variables.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Create a configuration object using the default configurations provided by the SDK.
    cfg = oss.config.load_default()

    # Set the credential provider to the previously created object.
    cfg.credentials_provider = credentials_provider

    # Set the region for the OSS client based on user input.
    cfg.region = args.region

    # If the user provides a custom endpoint, update the configuration.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Create an OSS client instance using the preceding configurations.
    client = oss.Client(cfg)

    # Define the data to be appended.
    data1 = b'hello'
    data2 = b' world'

    # Append data for the first time.
    result = client.append_object(oss.AppendObjectRequest(
        bucket=args.bucket,  # Specify the destination bucket.
        key=args.key,  # Specify the key of the object.
        position=0,  # The starting position for appending, which is initially 0.
        body=data1,  # The data to be appended.
    ))

    # Print the result of the first append 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' next position: {result.next_position},' 
    )

    # Append data for the second time.
    result = client.append_object(oss.AppendObjectRequest(
        bucket=args.bucket,  # Specify the destination bucket.
        key=args.key,  # Specify the key of the object.
        position=result.next_position,  # Start from the next position of the previous append operation.
        body=data2,  # The data to be appended.
    ))

    # Print the result of the second append 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' next position: {result.next_position},'
    )

# When this script is run directly, call the main function.
if __name__ == "__main__":
    main()

Senaryolar

Ekleme yüklemesi için ilerleme çubuğu görüntüleme

import argparse
import alibabacloud_oss_v2 as oss

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

# Add command-line arguments.
# --region: Specifies the region where the OSS bucket is located.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# --bucket: Specifies the name of the bucket to operate on.
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# --endpoint: An optional parameter that specifies the domain name used to access the OSS service.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# --key: Specifies the key of the object (file) in OSS.
parser.add_argument('--key', help='The name of the object.', required=True)

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

    # Load the authentication information required for OSS from environment variables.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Create a configuration object using the default configurations provided by the SDK.
    cfg = oss.config.load_default()

    # Set the credential provider to the previously created object.
    cfg.credentials_provider = credentials_provider

    # Set the region for the OSS client based on user input.
    cfg.region = args.region

    # If the user provides a custom endpoint, update the configuration.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Create an OSS client instance using the preceding configurations.
    client = oss.Client(cfg)

    # Define a dictionary variable named progress_state to save the upload progress status. The initial value is 0.
    progress_state = {'saved': 0}
    def _progress_fn(n, written, total):
        # Use a dictionary to store the cumulative number of written bytes to avoid using global variables.
        progress_state['saved'] += n

        # Calculate the current upload percentage. The value is obtained by dividing the number of written bytes by the total number of bytes and rounding down the result.
        rate = int(100 * (float(written) / float(total)))

        # Print the current upload progress. \r indicates returning to the beginning of the line to implement real-time refresh in the command line.
        # end='' indicates no line break, so that the next printout overwrites the current line.
        print(f'\rUpload progress: {rate}% ', end='')

    # Define the data to be appended.
    data1 = b'hello'
    data2 = b' world'

    # Append data for the first time.
    result = client.append_object(oss.AppendObjectRequest(
        bucket=args.bucket,  # Specify the destination bucket.
        key=args.key,  # Specify the key of the object.
        position=0,  # The starting position for appending, which is initially 0.
        body=data1,  # The data to be appended.
        progress_fn=_progress_fn,  # Set the progress callback function.
    ))

    # Print the result of the first append 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' next position: {result.next_position},'
    )

    # Append data for the second time.
    result = client.append_object(oss.AppendObjectRequest(
        bucket=args.bucket,  # Specify the destination bucket.
        key=args.key,  # Specify the key of the object.
        position=result.next_position,  # Start from the next position of the previous append operation.
        body=data2,  # The data to be appended.
        progress_fn=_progress_fn,  # Set the progress callback function.
    ))

    # Print the result of the second append 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' next position: {result.next_position},'
    )

# When this script is run directly, call the main function.
if __name__ == "__main__":
    main()

Başvurular