Tüm Ürünler
Search
Belge Merkezi

Object Storage Service:Resumable download (C SDK)

Son Güncelleme:Oct 01, 2026

Ağ kararsızlığı veya diğer istisnalar nedeniyle büyük dosyaların indirilmesi başarısız olabilir. Bu durumlarda, birkaç kez yeniden denense bile indirme işlemi tamamlanmayabilir. OSS, bu sorunu çözmek için kesintiden devam eden indirme özelliğini sunar.

Notlar

  • Bu konuda Çin (Hangzhou) bölgesinin genel uç noktası kullanılmaktadır. OSS ile aynı bölgede bulunan diğer Alibaba Cloud hizmetlerinden OSS'e erişmek için dahili bir uç nokta kullanın. OSS bölgeleri ve uç noktaları hakkında daha fazla bilgi için bkz. Bölgeler ve uç noktalar.

  • Bu konudaki örnekler, bir OSS etki alanı adı kullanarak OSSClient örneğinin nasıl oluşturulacağını göstermektedir. Özel bir etki alanı adı veya Security Token Service (STS) kullanarak OSSClient örneği oluşturmak için bkz. Başlatma (C SDK).

    Not

    STS kullanarak kesintiden devam eden indirme işlemini gerçekleştirmek için C SDK V3.5.2 veya sonraki bir sürümü kullandığınızdan emin olun.

  • Kesintiden devam eden indirme özelliğini kullanmak için oss:GetObject iznine sahip olmanız gerekir. Daha fazla bilgi için bkz. Özel ilke atama.

Örnek kod

Kesintiden devam eden indirme işlemini gerçekleştirmek için oss_resumable_clt_params_t yöntemini kullanabilirsiniz. oss_resumable_clt_params_t yöntemi aşağıdaki parametreleri içerir:


Parametre


Açıklama


thread_num


Eş zamanlı iş parçacığı sayısı. Varsayılan değer 1'dir.


enable_checkpoint


Kesintiden devam eden indirmenin etkinleştirilip etkinleştirilmeyeceğini belirtir. Varsayılan olarak bu özellik devre dışıdır.


partSize


Parça boyutu. Değer 1 B ile 5 GB arasında olmalıdır. Birim bayttır.


checkpoint_path


Kontrol noktası dosyasının yolu. Varsayılan yol {upload_file_path}.cp klasörüdür.

İndirme sırasında ilerleme bilgileri bir checkpoint dosyasına kaydedilir. İndirme başarısız olursa, sonraki deneme indirmeye kaldığı yerden devam etmek için checkpoint dosyasını okur. İndirme tamamlandığında checkpoint dosyası silinir.

Aşağıdaki kod, kesintiden devam eden indirme işleminin nasıl gerçekleştirileceğini göstermektedir.

#include "oss_api.h"
#include "aos_http_io.h"
/* Replace yourEndpoint with the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";

/* Replace with your bucket name, for example, examplebucket. */
const char *bucket_name = "examplebucket";
/* Specify the full path of the object. The full path cannot contain the bucket name. For example, exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Specify the full path of the local file. */
const char *local_filename = "yourLocalFilename";
/* Replace yourRegion with the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Initialize the aos_string_t type with a char* string. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */    
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // You must also configure the following two parameters.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Specify whether a CNAME is used. A value of 0 indicates that no CNAME is used. */
    options->config->is_cname = 0;
    /* Set network parameters, such as the timeout period. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Call the aos_http_io_initialize method at the program entry to initialize global resources such as the network and memory. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* A memory pool (pool) for memory management, which is equivalent to apr_pool_t. The implementation code is in the apr library. */
    aos_pool_t *pool;
    /* Create a new memory pool. The second parameter is NULL, which indicates that the new pool does not inherit from another memory pool. */
    aos_pool_create(&pool, NULL);
    /* Create and initialize options. This parameter includes global configuration information such as endpoint, access_key_id, access_key_secret, is_cname, and curl. */
    oss_request_options_t *oss_client_options;
    /* Allocate memory for options in the memory pool. */
    oss_client_options = oss_request_options_create(pool);
    /* Initialize the client options oss_client_options. */
    init_options(oss_client_options);
    /* Initialize parameters. */
    aos_string_t bucket;
    aos_string_t object;
    aos_string_t file;
    aos_table_t *headers = NULL;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    oss_resumable_clt_params_t *clt_params;
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    aos_str_set(&file, local_filename);
    /* Perform a resumable download. */
    clt_params = oss_create_resumable_clt_params_content(pool, 1024 * 100, 3, AOS_TRUE, NULL);
    resp_status = oss_resumable_download_file(oss_client_options, &bucket, &object, &file, headers, NULL, clt_params, NULL, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("download succeeded\n");
    } else {
        printf("download failed\n");
    }
    /* Release the memory pool. This is equivalent to releasing the memory allocated for various resources during the request. */
    aos_pool_destroy(pool);
    /* Release the previously allocated global resources. */
    aos_http_io_deinitialize();
    return 0;
}

İlgili belgeler

  • Kesintiden devam eden indirme için eksiksiz örnek kodu görmek için bkz. GitHub örneği.

  • Kesintiden devam eden indirme API işlemi hakkında daha fazla bilgi için bkz. GetObject.