Tautan simbolik menyediakan cara praktis untuk mengakses objek yang sering digunakan dalam bucket. Setelah membuat tautan simbolik, Anda dapat menggunakannya seperti pintasan Windows untuk mengakses objek target.
Perhatian
Topik ini menggunakan 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 menggunakan nama domain kustom atau Security Token Service (STS), lihat Initialization (C SDK).
Untuk membuat tautan simbolik, Anda harus memiliki izin
oss:PutObject. Untuk mengambil tautan simbolik, Anda harus memiliki izinoss:GetObject. Untuk informasi selengkapnya, lihat Grant custom permissions to a RAM user.
Buat tautan simbolik
Kode berikut menunjukkan contoh cara membuat tautan simbolik:
#include "oss_api.h"
#include "aos_http_io.h"
/* Ganti yourEndpoint dengan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Misalnya, examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Tentukan path lengkap tautan simbolik. */
const char *link_object_name = "yourLinkObjectName";
/* Ganti yourRegion dengan ID wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah 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 contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
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"));
// Anda juga harus mengonfigurasi dua parameter berikut.
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* Tentukan apakah CNAME digunakan. Nilai 0 menunjukkan bahwa CNAME tidak digunakan. */
options->config->is_cname = 0;
/* Atur parameter jaringan, seperti periode timeout. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* Panggil metode aos_http_io_initialize di titik masuk program untuk menginisialisasi sumber daya global, seperti jaringan dan memori. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Buat memory pool untuk manajemen memori. Ini setara dengan apr_pool_t. Kode implementasinya ada di library apr. */
aos_pool_t *pool;
/* Buat memory pool. Parameter kedua adalah NULL, yang menunjukkan bahwa memory pool baru tidak mewarisi dari memory pool lain. */
aos_pool_create(&pool, NULL);
/* Buat dan inisialisasi opsi. Opsi 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 dalam memory pool. */
oss_client_options = oss_request_options_create(pool);
/* Inisialisasi opsi klien oss_client_options. */
init_options(oss_client_options);
/* Inisialisasi parameter. */
aos_string_t bucket;
aos_string_t object;
aos_string_t sym_object;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
aos_str_set(&sym_object, link_object_name);
resp_status = oss_put_symlink(oss_client_options, &bucket, &sym_object, &object, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("put symlink succeeded\n");
} else {
printf("put symlink 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;
}Ambil tautan simbolik
Untuk mengambil tautan simbolik, Anda harus memiliki izin baca terhadapnya. Kode berikut menunjukkan contoh cara mengambil tautan simbolik beserta nama file objek yang ditunjuknya:
#include "oss_api.h"
#include "aos_http_io.h"
/* Ganti yourEndpoint dengan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Misalnya, examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan path lengkap tautan simbolik. */
const char *link_object_name = "yourLinkObjectName";
/* Ganti yourRegion dengan ID wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah 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 contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
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"));
// Anda juga harus mengonfigurasi dua parameter berikut.
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* Tentukan apakah CNAME digunakan. Nilai 0 menunjukkan bahwa CNAME tidak digunakan. */
options->config->is_cname = 0;
/* Atur parameter jaringan, seperti periode timeout. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* Panggil metode aos_http_io_initialize di titik masuk program untuk menginisialisasi sumber daya global, seperti jaringan dan memori. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Buat memory pool untuk manajemen memori. Ini setara dengan apr_pool_t. Kode implementasinya ada di library apr. */
aos_pool_t *pool;
/* Buat memory pool. Parameter kedua adalah NULL, yang menunjukkan bahwa memory pool baru tidak mewarisi dari memory pool lain. */
aos_pool_create(&pool, NULL);
/* Buat dan inisialisasi opsi. Opsi 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 dalam memory pool. */
oss_client_options = oss_request_options_create(pool);
/* Inisialisasi opsi klien oss_client_options. */
init_options(oss_client_options);
/* Inisialisasi parameter. */
aos_string_t bucket;
aos_string_t link_object;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
char *target_object_name = NULL;
aos_str_set(&bucket, bucket_name);
aos_str_set(&link_object, link_object_name);
resp_status = oss_get_symlink(oss_client_options, &bucket, &link_object, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("get symlink succeeded\n");
target_object_name = (char*)(apr_table_get(resp_headers, OSS_CANNONICALIZED_HEADER_SYMLINK));
printf("target_object_name: %s \n", target_object_name);
} else {
printf("get symlink 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 informasi selengkapnya mengenai operasi API untuk membuat tautan simbolik, lihat PutSymlink.
Untuk informasi selengkapnya mengenai operasi API untuk mengambil tautan simbolik, lihat GetSymlink.