Tüm Ürünler
Search
Belge Merkezi

Object Storage Service:Resumable upload (C SDK)

Son Güncelleme:Oct 01, 2026

Yeniden başlatılabilir yükleme, bir dosyayı birden çok parçaya böler ve bu parçaları ayrı ayrı yükler. Tüm parçalar yüklendikten sonra tek bir dosya halinde birleştirilerek yükleme tamamlanır.

Genel bilgiler

Yükleme sırasında ilerleme durumu bir kontrol noktası dosyasında kaydedilir. Bir parça yüklenemezse yükleme işlemi, kontrol noktası dosyasında kaydedilen noktadan devam eder. Yükleme tamamlandıktan sonra kontrol noktası dosyası silinir.

Yeniden başlatılabilir yüklemeleri oss_resumable_clt_params_t kullanarak uygulayabilirsiniz. Bu yöntem için kullanılan genel parametreler aşağıdaki tabloda açıklanmıştır.


Parametre


Açıklama


thread_num


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


enable_checkpoint


Yeniden başlatılabilir yüklemenin etkin olup olmadığını belirtir. Varsayılan olarak bu özellik devre dışı bırakılmıştır.


partSize


Çok parçalı yüklemede her bir parçanın boyutu. Değer 100 KB ile 5 GB aralığında olmalıdır.


checkpoint_path


Kontrol noktası dosyasının yolu. Varsayılan yol {upload_file_path}.cp şeklindedir.

Notlar

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

  • Bu konuda bir OSS uç noktası kullanarak bir OSSClient örneği oluşturma işlemi gösterilmektedir. Özel etki alanı kullanma veya Security Token Service (STS) kimlik bilgileriyle kimlik doğrulama gibi alternatif yapılandırmalar için bkz. Başlatma (C SDK).

  • Yeniden başlatılabilir yüklemeyi kullanmak için oss:PutObject iznine sahip olmanız gerekir. Daha fazla bilgi için bkz. Özel ilke atama.

Örnek kod

Aşağıdaki kod, yeniden başlatılabilir bir yüklemenin nasıl yapılacağını gösterir:

#include "oss_api.h"
#include "aos_http_io.h"
/* Set yourEndpoint to the Endpoint of the bucket's region. For example, for the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";

/* Specify the bucket name, such as examplebucket. */
const char *bucket_name = "examplebucket";
/* Specify the full path of the object. The full path cannot contain the bucket name. Example: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Specify the full path of the local file. */
const char *local_filename = "yourLocalFilename";
/* Set yourRegion to the Region of the bucket. For example, for 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 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;
    /* Specifies whether a CNAME is used. A value of 0 indicates that a CNAME is not 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[])
{
    /* At the program entry point, call the aos_http_io_initialize method to initialize global resources such as the network and memory. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* A memory pool for memory management. It is equivalent to apr_pool_t. The implementation 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 configurations 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_list_t resp_body;
    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);
    aos_list_init(&resp_body);
    /* Perform a resumable upload. */
    clt_params = oss_create_resumable_clt_params_content(pool, 1024 * 100, 3, AOS_TRUE, NULL);
    resp_status = oss_resumable_upload_file(oss_client_options, &bucket, &object, &file, headers, NULL, clt_params, NULL, &resp_headers, &resp_body);
    if (aos_status_is_ok(resp_status)) {
        printf("resumable upload succeeded\n");
    } else {
        printf("resumable upload failed\n");
    }
    /* Release the memory pool. This releases the memory allocated for resources during the request. */
    aos_pool_destroy(pool);
    /* Release the previously allocated global resources. */
    aos_http_io_deinitialize();
    return 0;
}

İlgili belgeler

Yeniden başlatılabilir yükleme için eksiksiz örnek kodu görmek üzere GitHub adresine bakın.