Topik ini menjelaskan cara menampilkan progres unduhan menggunakan progress bar.
Catatan
Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Regions and endpoints.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient dengan nama domain kustom atau Security Token Service (STS), lihat Initialization (C SDK).
Batasan
Metode oss_get_object_from_file dan oss_get_object_from_buffer tidak mendukung fitur progress bar.
Kode contoh
Kode berikut menunjukkan cara menampilkan progres unduhan menggunakan progress bar.
#include "oss_api.h"
#include "aos_http_io.h"
/* Set yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), set Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "example.txt";
/* Tentukan nama file yang akan diunduh ke mesin lokal Anda. */
const char *download_filename = "1.txt";
/* Set yourRegion ke wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), set Region ke cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* Inisialisasi tipe aos_string_t dengan string char*. */
aos_str_set(&options->config->endpoint, endpoint);
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
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"));
// Konfigurasikan dua parameter berikut.
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* Tentukan apakah CNAME digunakan. 0 berarti CNAME tidak digunakan. */
options->config->is_cname = 0;
/* Setel parameter jaringan, seperti periode timeout. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
void percentage(int64_t consumed_bytes, int64_t total_bytes)
{
assert(total_bytes >= consumed_bytes);
printf("%%%" APR_INT64_T_FMT "\n", consumed_bytes * 100 / total_bytes);
}
int main(int argc, char *argv[])
{
/* Pada titik masuk program, panggil metode aos_http_io_initialize untuk menginisialisasi sumber daya global, seperti jaringan dan memori. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Memory pool (pool) untuk manajemen memori setara dengan apr_pool_t. Kode implementasinya berada di library apr. */
aos_pool_t *pool;
/* Buat memory pool baru. Parameter kedua adalah NULL, yang berarti pool baru ini tidak mewarisi dari memory pool lain. */
aos_pool_create(&pool, NULL);
/* Buat dan inisialisasi opsi. Parameter ini mencakup konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
oss_request_options_t *oss_client_options;
/* Alokasikan memori untuk opsi di dalam memory pool. */
oss_client_options = oss_request_options_create(pool);
/* Inisialisasi opsi client oss_client_options. */
init_options(oss_client_options);
/* Inisialisasi parameter. */
aos_string_t bucket;
aos_string_t object;
aos_string_t file;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
/* Unduh file dengan progress bar. */
aos_pool_create(&pool, NULL);
oss_client_options = oss_request_options_create(pool);
init_options(oss_client_options);
aos_str_set(&file, download_filename);
resp_status = oss_do_get_object_to_file(oss_client_options, &bucket, &object, NULL, NULL, &file, percentage, NULL);
if (aos_status_is_ok(resp_status)) {
printf("get object to file succeeded\n");
} else {
printf("get object to file failed\n");
}
/* Hapus memory pool. Ini akan melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
aos_pool_destroy(pool);
/* Lepaskan sumber daya global yang sebelumnya dialokasikan. */
aos_http_io_deinitialize();
return 0;
}Referensi
Untuk kode contoh lengkap tentang penggunaan progress bar saat mengunduh file, lihat contoh di GitHub.