閱讀655 返回首頁    go 新東方


服務端__Media-C-SDK_SDK 參考_對象存儲 OSS-阿裏雲

OSS MEDIA C SDK分為客戶端,服務端和HLS三部分,下麵主要介紹服務端的相關操作,其他的操作請訪問後麵章節

接口

服務端相關的操作接口都位於oss_media.h中,目前提供的接口有:

  • oss_media_create_bucket
  • oss_media_delete_bucket
  • oss_media_create_bucket_lifecycle
  • oss_media_get_bucket_lifecycle
  • oss_media_delete_bucket_lifecycle
  • oss_media_delete_file
  • oss_media_list_files
  • oss_media_get_token
  • oss_media_get_token_from_policy

下麵會詳細介紹各個接口的功能和注意事項

基礎結構體介紹

typedef struct oss_media_config_s {
    char *endpoint;
    int is_cname;
    char *access_key_id;
    char *access_key_secret;
    char *role_arn;
} oss_media_config_t;

typedef struct oss_media_files_s {
    char *path;
    char *marker;
    int  max_size;

    char *next_marker;
    int  size;
    char **file_names;
} oss_media_files_t;

注:

  • endpoint,比如oss-cn-hangzhou.aliyuncs.com。
  • is_cname,是否使用了CNAME
  • access_key_id,阿裏雲提供的訪問控製的access key id
  • access_key_secret,阿裏雲提供的訪問控製的access key secret
  • role_arn,阿裏雲訪問控製中創建的角色的Arn,具體位置在:訪問控製RAM控製台 -> 角色管理 -> 點擊相應角色名稱 -> 基本信息 -> Arn,格式類似於acs:ram::xxxxxx:role/yyyy。如果還沒有角色,需要創建一個新的角色,並賦予AliyunOSSFullAccess和AliyunSTSAssumeRoleAccess等權限。
  • marker,設定結果從marker之後按字母排序的第一個開始返回。
  • max_size,設定返回的最大數,取值不能大於1000。
  • next_marker,下次執行時開始的位置

初始化

/**
 *  @brief  初始化oss media
 *  @note   在程序開始的時候應該首先調用此接口,初始化OSS MEDIA C SDK
 *  @return:
 *      返回0時表示成功
 *      否則, 表示出現了錯誤,可能導致失敗的原因包括:內存不足,apr、curl版本太低等
 */
int oss_media_init();

注:

銷毀

/**
 *  @brief  銷毀oss meida
 *  @note   在程序結束的時候應該最後調用此接口,銷毀OSS MEDIA C SDK
 */
void oss_media_destroy();

注:

創建存儲空間

/**
 *  @brief  創建新的存儲空間
 *  @paramp[in] oss_media_acl_t
 *     OSS_ACL_PRIVATE         私有讀寫
 *     OSS_ACL_PUBLIC_READ     公共讀,私有寫
 *     OSS_ACL_PUBLIC_READ_WRITE 公共讀寫
 *  @return:
 *      返回0時表示成功
 *      否則, 返回-1時表示出現了錯誤,可能導致失敗的原因包括:無法連接OSS,無權限等
 */
int oss_media_create_bucket(oss_media_config_t *config, const char *bucket_name, oss_media_acl_t acl);

示例程序:

static void init_media_config(oss_media_config_t *config) {
    config->endpoint = "your endpoint";
    config->access_key_id = "阿裏雲提供的access key id";
    config->access_key_secret = "阿裏雲提供的access key secret";
    config->role_arn = "阿裏雲訪問控製RAM提供的role arn"; 
    config->is_cname = 0;
}

void create_bucket() {
    int ret;
    char *bucket_name;
    oss_media_config_t config;

    /* 初始化變量 */    
    bucket_name = "<your bucket name>";
    init_media_config(&config);

    /* 創建存儲空間 */
    ret = oss_media_create_bucket(&config, bucket_name, OSS_ACL_PRIVATE);

    if (0 == ret) {
        printf("create bucket[%s] succeeded.n", bucket_name);
    } else {
        printf("create bucket[%s] failed.n", bucket_name);
    }
}

注:

刪除存儲空間

/*
 *  @brief  刪除存儲空間
 *  @return:
 *      返回0時表示成功
 *      否則, 返回-1時表示出現了錯誤,可能導致失敗的原因包括:無法連接OSS,無權限等
 */
int oss_media_delete_bucket(oss_media_config_t *config, const char *bucket_name);

示例程序:

void delete_bucket() {
    int ret;
    char *bucket_name;
    oss_media_config_t config;

    /* 初始化變量 */
    bucket_name = "<your bucket name>";
    init_media_config(&config);

    /* 刪除存儲空間 */
    ret = oss_media_delete_bucket(&config, bucket_name);

    if (0 == ret) {
        printf("delete bucket[%s] succeeded.n", bucket_name);
    } else {
        printf("delete bucket[%s] failed.n", bucket_name);
    }    
}

注:

創建存儲生命周期規則

/**
 *  @brief  創建存儲空間生命周期規則
 *  @note   這些規則可以控製文件的自動刪除時間
 *  @return:
 *      返回0時表示成功
 *      否則, 返回-1時表示出現了錯誤,可能導致失敗的原因包括:無法連接OSS,無權限等
 */
int oss_media_create_bucket_lifecycle(oss_media_config_t *config, const char *bucket_name, oss_media_lifecycle_rules_t *rules);

示例程序:

void create_bucket_lifecycle() {
    int ret;
    char *bucket_name;
    oss_media_lifecycle_rules_t *rules;
    oss_media_config_t config;

    /* 初始化變量 */
    bucket_name = "<your bucket name>";
    init_media_config(&config);

    /* 創建生命周期規則 */
    rules = oss_media_create_lifecycle_rules(2);
    oss_media_lifecycle_rule_t rule1;
    rule1.name = "example-1";
    rule1.path = "/example/1";
    rule1.status = "Enabled";
    rule1.days = 1;
    oss_media_lifecycle_rule_t rule2;
    rule2.name = "example-2";
    rule2.path = "/example/2";
    rule2.status = "Disabled";
    rule2.days = 2;

    rules->rules[0] = &rule1;
    rules->rules[1] = &rule2;

    /* 設置存儲空間的生命周期規則 */
    ret = oss_media_create_bucket_lifecycle(&config, 
            bucket_name, rules);

    if (0 == ret) {
        printf("create bucket[%s] lifecycle succeeded.n", bucket_name);
    } else {
        printf("create bucket[%s] lifecycle failed.n", bucket_name);
    }

    /* 釋放資源 */
    oss_media_free_lifecycle_rules(rules);
}

注:

獲取存儲空間的生命周期規則

/**
 *  @brief  獲取存儲空間的生命周期規則
 *  @return:
 *      返回0時表示成功
 *      否則, 返回-1時表示出現了錯誤,可能導致失敗的原因包括:無法連接OSS等
 */
int oss_media_get_bucket_lifecycle(oss_media_config_t *config, const char *bucket_name, oss_media_lifecycle_rules_t *rules);

示例程序:

void get_bucket_lifecycle() {
    int ret, i;
    char *bucket_name;
    oss_media_lifecycle_rules_t *rules;
    oss_media_config_t config;

    /* 初始化變量 */
    bucket_name = "<your bucket name>";
    init_media_config(&config);

    /* 獲取生命周期規則 */
    rules = oss_media_create_lifecycle_rules(0);
    ret = oss_media_get_bucket_lifecycle(&config, bucket_name, rules);

    if (0 == ret) {
        printf("get bucket[%s] lifecycle succeeded.n", bucket_name);
    } else {
        printf("get bucket[%s] lifecycle failed.n", bucket_name);
    }

    for (i = 0; i < rules->size; i++) {
        printf(">>>> rule: [name:%s, path:%s, status=%s, days=%d]n",
               rules->rules[i]->name, rules->rules[i]->path, 
               rules->rules[i]->status, rules->rules[i]->days);
    }

    /* 釋放資源 */
    oss_media_free_lifecycle_rules(rules);
}

注:

刪除存儲空間的生命周期規則

/**
 *  @brief  刪除存儲空間的生命周期規則
 *  @return:
 *      返回0時表示成功
 *      否則, 返回-1時表示出現了錯誤,可能導致失敗的原因包括:無法連接OSS,無權限等
 */
int oss_media_delete_bucket_lifecycle(oss_media_config_t *config, const char *bucket_name);

示例程序:

void delete_bucket_lifecycle() 
{
    int ret;
    char *bucket_name;
    oss_media_config_t config;

    /* 初始化變量 */
    bucket_name = "<your bucket name>";
    init_media_config(&config);

    /* 刪除生命周期規則 */
    ret = oss_media_delete_bucket_lifecycle(&config, bucket_name);

    if (0 == ret) {
        printf("delete bucket[%s] lifecycle succeeded.n", bucket_name);
    } else {
        printf("delete bucket[%s] lifecycle failed.n", bucket_name);
    }
}

注:

刪除文件

/**
 *  @brief  刪除存儲空間中特定的文件
 *  @return:
 *      返回0時表示成功
 *      否則, 返回-1時表示出現了錯誤,可能導致失敗的原因包括:無法連接OSS,無權限等
 */
int oss_media_delete_file(oss_media_config_t *config, const char *bucket_name, const char *key);

示例程序:

void delete_file() {
    int ret;
    oss_media_config_t config;
    char *file;
    char *bucket_name;

    /* 初始化變量 */
    file = "oss_media_file";
    bucket_name = "<your bucket name>";
    init_media_config(&config);

    /* 刪除文件 */
    ret = oss_media_delete_file(&config, bucket_name, file);

    if (0 == ret) {
        printf("delete file[%s] succeeded.n", file);
    } else {
        printf("delete file[%s] lifecycle failed.n", file);
    }
}

注:

列出文件

/**
 *  @brief  列出特定存儲空間內的文件
 *  @return:
 *      返回0時表示成功
 *      否則, 返回-1時表示出現了錯誤,可能導致失敗的原因包括:無法連接OSS,無權限等
 */
int oss_media_list_files(oss_media_config_t *config, const char *bucket_name, oss_media_files_t *files);

示例程序:

void list_files() {
    int ret, i;
    char *bucket_name;
    oss_media_files_t *files;
    oss_media_config_t config;

    /* 初始化變量 */
    bucket_name = "<your bucket name>>";
    init_media_config(&config);

    files = oss_media_create_files();
    files->max_size = 50;

    /* 列舉文件 */
    ret = oss_media_list_files(&config, bucket_name, files);

    if (0 == ret) {
        printf("list files succeeded.n");
    } else {
        printf("list files lifecycle failed.n");
    }

    for (i = 0; i < files->size; i++) {
        printf(">>>>file name: %sn", files->file_names[i]);
    }

    /* 釋放資源 */
    oss_media_free_files(files);
}

注:

獲取臨時token

/*
 *  @brief  獲取臨時token
 *  @param[in]:
      mode:
 *      'r': 讀模式
 *      'w': 覆蓋寫模式
 *      'a': 追加寫模式
 *    expiration: 臨時token的有效時間,最小15分鍾,最長1小時,單位秒
 *  @return:
 *      返回0時表示成功
 *      否則, 返回-1時表示出現了錯誤,可能導致失敗的原因包括:無法連接阿裏雲STS服務,沒有開通RAM、STS,沒有創建Role,參數不合法等
 */
int oss_media_get_token(oss_media_config_t *config, 
                        const char *bucket_name, 
                        const char *path, 
                        const char *mode, 
                        int64_t expiration,
                        oss_media_token_t *token);

示例程序:

void get_token() {
    int ret;
    char *bucket_name;
    oss_media_token_t token;
    oss_media_config_t config;

    /* 初始化變量 */
    bucket_name = "<your bucket name>";
    init_media_config(&config);

    /* 獲取臨時token */
    ret = oss_media_get_token(&config, bucket_name, "/*", "rwa", 
                            3600, &token);

    if (0 == ret) {
        printf("get token succeeded, access_key_id=%s, access_key_secret=%s, token=%sn", 
               token.tmpAccessKeyId, token.tmpAccessKeySecret, token.securityToken);
    } else {
        printf("get token failed.n");
    }
}

注:

通過自定義policy獲取token

/**
 *  @brief  通過指定自定義的policy獲取token
 *  @param[in]:
 *      expiration:  臨時token的有效時間,最小15分鍾,最長1小時,單位秒
 *  @return:
 *      返回0時表示成功
 *      否則, 返回-1時表示出現了錯誤,可能導致失敗的原因包括:無法連接阿裏雲STS服務,沒有開通RAM、STS,沒有創建Role,參數不合法等
 */
int oss_media_get_token_from_policy(oss_media_config_t *config, 
                                    const char *policy, 
                                    int64_t expiration,
                                    oss_media_token_t *token);

示例程序:

void get_token_from_policy() {
    int ret;
    oss_media_token_t token;
    char *policy;
    oss_media_config_t config;

    /* 初始化變量 */
    init_media_config(&config);

    /* 設置自定義policy */
    policy = "{"Version":"1","Statement":[{"Effect":"Allow", "
             ""Action":"*", "Resource":"*"}]}";

    /* 獲取token */
    ret = oss_media_get_token_from_policy(&config, policy, 3600, &token);

    if (0 == ret) {
        printf("get token succeeded, access_key_id=%s, access_key_secret=%s, token=%sn", 
               token.tmpAccessKeyId, token.tmpAccessKeySecret, token.securityToken);
    } else {
        printf("get token failed.n");
    }
}

注:

最後更新:2016-11-23 17:16:08

  上一篇:go 錯誤__Go-SDK_SDK 參考_對象存儲 OSS-阿裏雲
  下一篇:go HLS基礎接口__Media-C-SDK_SDK 參考_對象存儲 OSS-阿裏雲