OSS MEDIA C SDKには、クライアント、サーバー、HLSの3つの部分があります。 次に、サーバーに関連する操作を紹介します。 その他の操作については、次の章を参照してください。
インターフェイス
サーバーに関連する操作インターフェイスはすべて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 * エンドポイント;
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 * パス;
char * マーカー;
int max_size;
char * next_marker;
intサイズ;
char **file_names;
} oss_media_files_t;
説明
- endpoint: たとえば、oss-cn-hangzhou.aliyuncs.com。
- is_cname: CNAMEが有効になっているかどうか。
- access_key_id: Alibaba Cloudが提供するアクセス制御用のAccessKey ID。
- access_key_secret: Alibaba Cloudが提供するアクセス制御用のAccessKey Secret。
- role_arn: Alibaba Cloud RAMで作成されたロールのARN。この値は、RAMコンソール> ロールの管理> ロールの名前> 基本情報> ARNをクリックします。 値の形式は、acs:ram::xxxxxx:role/yyyyに似ています。 使用可能なロールがない場合は、新しいロールを作成し、そのロールにAliyunOSSFullAccessおよびAliyunSTSAssumeRoleAccess権限を付与する必要があります。
- marker: 返される結果を、Markerの後の最初のエントリからアルファベット順に開始するように設定します。
- max_size: 返される最大数を設定します。 値は1,000を超えることはできません。
- next_marker: 次の実行の開始位置。
初期化
/**
* @ brief OSSメディアの初期化
* @ noteこのインターフェイスは、プログラムがOSS MEDIA C SDKの初期化を開始するときに最初に呼び出す必要があります。
* @ return:
* 0が返された場合は、操作が成功したことを示します。
* それ以外の場合は、エラーが発生したことを示します。 失敗の考えられる原因には、メモリ不足、またはAPRまたはCURLのバージョンが低すぎることが含まれます。
* /
int oss_media_init();
説明 完全なコードについては、『GitHub』をご参照ください。
破壊
/**
* @ brief OSS meidaを破棄する
* @ noteこのインターフェイスは、OSS MEDIA C SDKを破棄するためにプログラムが終了したときに最後に呼び出される必要があります。
* /
void oss_media_destroy();
説明 完全なコードについては、『GitHub』をご参照ください。
バケットを作成する
/**
* @ bucket新しいバケットを作成する
* @ paramp[in] oss_media_acl_t
* OSS_ACL_PUBLIC_READパブリック読み取りおよびプライベート書き込み
* 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 = "Alibaba Cloudが提供するアクセスキーID";
config->access_key_secret = "Alibaba Cloudが提供するアクセスキーシークレット";
config->role_arn = "Alibaba Cloud RAMが提供するロールARN";
config->is_cname = 0;
}
void create_bucket() {
int ret;
char * bucket_name;
oss_media_config_t config;
/* 変数を初期化する * /
bucket_name = "<バケット名>";
init_media_config(&config);
/* バケットを作成する * /
ret = oss_media_create_bucket(&config, bucket_name, OSS_ACL_PRIVATE);
if (0 == ret) {
printf("create bucket[% s] successed.\n", bucket_name);
} else {
printf("create bucket[% s] failed.\n", bucket_name);
}
}
説明 完全なコードについては、『GitHub』をご参照ください。
バケットの削除
/*
* @ 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 = "<バケット名>";
init_media_config(&config);
/* バケットを削除する * /
ret = oss_media_delete_bucket(&config, bucket_name);
if (0 == ret) {
printf("delete bucket[% s] successed.\n", bucket_name);
} else {
printf("delete bucket[% s] failed.\n", bucket_name);
}
}
説明 完全なコードについては、『GitHub』をご参照ください。
バケットのライフサイクルルールの作成
/**
* @ 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 * ルール;
oss_media_config_t config;
/* 変数を初期化する * /
bucket_name = "<バケット名>";
init_media_config(&config);
/* ライフサイクルルールの作成 * /
ルール=oss_media_create_lifecycle_rules(2);
oss_media_lifecycle_rule_t rule1;
rule1.name = "example-1";
rule1.path = "/example/1";
rule1.status = "有効";
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;
ルール-> ルール [1] = &rule2;
/* バケットのライフサイクルルールを設定する * /
ret = oss_media_create_bucket_lifecycle(&config,
bucket_name、ルール);
if (0 == ret) {
printf("create bucket[% s] lifecycle successed.\n", bucket_name);
} else {
printf("create bucket[% s] lifecycle failed.\n", bucket_name);
}
/* リソースを解放します。 */
oss_media_free_lifecycle_rules (ルール);
}
説明 コードの例は、『GitHub』をご参照ください。
バケットのライフサイクルルールを取得する
/**
* @ 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 * ルール;
oss_media_config_t config;
/* 変数を初期化する * /
bucket_name = "<バケット名>";
init_media_config(&config);
/* ライフサイクルルールの取得 * /
ルール=oss_media_create_lifecycle_rules(0);
ret = oss_media_get_bucket_lifecycle(&config, bucket_name, rules);
if (0 == ret) {
printf("get bucket[% s] lifecycle successed.\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",
ルール-> ルール [i]-> 名前、ルール-> ルール [i]-> パス、
ルール-> ルール [i]-> ステータス、ルール-> ルール [i]-> 日);
}
/* リソースを解放します。 */
oss_media_free_lifecycle_rules (ルール);
}
説明 完全なコードについては、『GitHub』をご参照ください。
バケットのライフサイクルルールの削除
/**
* @ bucketライフサイクルルールを削除する
* @ 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 = "<バケット名>";
init_media_config(&config);
/* ライフサイクルルールの削除 * /
ret = oss_media_delete_bucket_lifecycle(&config, bucket_name);
if (0 == ret) {
printf("delete bucket[% s] lifecycle successed.\n", bucket_name);
} else {
printf("delete bucket[% s] lifecycle failed.\n", bucket_name);
}
}
説明 完全なコードについては、『GitHub』をご参照ください。
オブジェクトの削除
/**
* @ 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 * ファイル;
char * bucket_name;
/* 変数を初期化する * /
file = "oss_media_file";
bucket_name = "<バケット名>";
init_media_config(&config);
/* オブジェクトの削除 * /
ret = oss_media_delete_file(&config, bucket_name, file);
if (0 == ret) {
printf("delete file[% s] successed.\n", file);
} else {
printf("delete file[% s] lifecycle failed.\n", file);
}
}
説明 完全なコードについては、『GitHub』をご参照ください。
オブジェクトの一覧表示
/**
* @ 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 * ファイル;
oss_media_config_t config;
/* 変数を初期化する * /
bucket_name = "<あなたのバケット名>>";
init_media_config(&config);
files = oss_media_create_files();
ファイル->max_size = 50;
/* List objects */
ret = oss_media_list_files(&config, bucket_name, files);
if (0 == ret) {
printf("リストファイルが成功しました。\n");
} else {
printf("list files lifecycle failed.\n");
}
for (i = 0; i < files->size; i ++) {
printf(">>>> ファイル名: % s\n", files->file_names[i]);
}
/* リソースを解放する * /
oss_media_free_files (ファイル);
}
説明 完全なコードについては、『GitHub』をご参照ください。
一時トークンを取得するGet the temporary token
/*
* @ brief一時トークンを取得する
* @ param[in]:
モード:
* 'r': 読み取りモード
* 'w': 上書きモード
* 'a': 書き込みモードの追加
* expiration: 一時トークンの有効期間。 値は15分から1時間の範囲です。 単位は秒です。
* @ return:
* 0が返された場合は、操作が成功したことを示します。
* それ以外の場合、"-1" が返された場合は、エラーが発生する可能性があります。 失敗の原因としては、オブジェクトがAlibaba Cloud STSに接続できない、RAMまたはSTSがアクティブ化されていない、ロールが作成されていない、パラメーターが無効であるなどが考えられます。
* /
int oss_media_get_token(oss_media_config_t * config,
const char * bucket_name,
const char * path,
const char * モード、
int64_tの有効期限、
oss_media_token_t * token);
プロジェクトの例:
void get_token() {
int ret;
char * bucket_name;
oss_media_token_tトークン;
oss_media_config_t config;
/* 変数を初期化する * /
bucket_name = "<バケット名>";
init_media_config(&config);
/* 一時トークンを取得する * /
ret = oss_media_get_token(&config, bucket_name, "/*", "rwa",
3600、&token);
if (0 == ret) {
printf("get token successed, access_key_id=% s, access_key_secret=% s, token=% s\n",
token.tmpAccessKeyId、token.tmpAccessKeySecret、token.securityToken);
} else {
printf("get token failed.\n");
}
}
説明 完全なコードについては、『GitHub』をご参照ください。
カスタムポリシーを使用してトークンを取得する
/**
* @ brief特定のカスタムポリシーを通じてトークンを取得する
* @ param[in]:
* expiration: 一時トークンの有効期間。 値は15分から1時間の範囲です。 単位は秒です。
* @ return:
* 0が返された場合は、操作が成功したことを示します。
* それ以外の場合、"-1" が返された場合は、エラーが発生する可能性があります。 失敗の原因としては、オブジェクトがAlibaba Cloud STSに接続できない、RAMまたはSTSがアクティブ化されていない、ロールが作成されていない、パラメーターが無効であるなどが考えられます。
* /
int oss_media_get_token_from_policy(oss_media_config_t * config、
const char * ポリシー、
int64_tの有効期限、
oss_media_token_t * token);
プロジェクトの例:
void get_token_from_policy() {
int ret;
oss_media_token_tトークン;
char * ポリシー;
oss_media_config_t config;
/* 変数を初期化する * /
init_media_config(&config);
/* カスタムポリシーを設定する * /
policy = "{\" Version\":\" 1\",\" Statement\":[{\" Effect\":\" Allow\", "]
"\" Action\":\" *\", \" Resource\":\" *\"}]}";
/* トークンを取得する * /
ret = oss_media_get_token_from_policy(&config、ポリシー、3600、トークン);
if (0 == ret) {
printf("get token successed, access_key_id=% s, access_key_secret=% s, token=% s\n",
token.tmpAccessKeyId、token.tmpAccessKeySecret、token.securityToken);
} else {
printf("get token failed.\n");
}
}
説明 完全なコードについては、『GitHub』をご参照ください。