阿里雲團隊努力不懈,力求將最新的技術內容更快地以您最熟悉的語言呈現。本文由簡體中文內容自動轉碼而成,過程無人工干預。阿里雲不保證此自動轉碼的準確性、完整性及時效性。因轉碼造成的任何內容錯誤及因此可能帶來的損失,阿里雲概不負責,敬請見諒。本文内容請以簡體中文版本為準。
全部產品
Search
文件中心

快速入門

更新時間: Oct 19, 2018

本節介紹如何快速使用OSS C SDK 完成常見操作,如建立儲存空間、上傳檔案、下載檔案等。

Step-1.初始化OSS C SDK運行環境

使用OSS C SDK前,您需要初始化運行環境,初始化結束前需要清理運行環境。以下代碼用於初始化OSS C SDK運行環境:

  1. int main(int argc, char *argv[])
  2. {
  3. /* 程式入口調用aos_http_io_initialize方法,這個方法內部會做一些全域資源的初始化,涉及網路,記憶體等部分 */
  4. if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
  5. exit(1);
  6. }
  7. /* 調用OSS SDK的介面上傳或下載檔案 */
  8. /* ... 使用者邏輯代碼,這裡省略 */
  9. /* 程式結束前,調用aos_http_io_deinitialize方法釋放之前分配的全域資源 */
  10. aos_http_io_deinitialize();
  11. return 0;
  12. }

說明:

  • aos_http_io_initialize初始化OSS C SDK運行環境,第一個參數用於user agent內容的個人化,用作後續統計。
  • aos_http_io_deinitialize清理OSS C SDK運行環境。

Step-2.初始化請求選項

OSS C SDK的所有操作都需要初始化請求選項,以下代碼用於初始化請求選項:

  1. /* 等價於apr_pool_t,用於記憶體管理的記憶體池,實現代碼在apr庫中 */
  2. aos_pool_t *pool;
  3. oss_request_options_t *options;
  4. /* 重新建立一個新的記憶體池,第二個參數是NULL,表示沒有繼承其它記憶體池 */
  5. aos_pool_create(&pool, NULL);
  6. /* 建立並初始化options,這個參數內部主要包括endpoint,access_key_id,acces_key_secret,is_cname, curl參數等全域配置資訊
  7. * options的記憶體是由pool分配的,後續釋放pool後,相當於釋放了options的記憶體,不需要單獨釋放記憶體
  8. */
  9. options = oss_request_options_create(pool);
  10. options->config = oss_config_create(options->pool);
  11. /* aos_str_set是用char*類型的字元串初始化aos_string_t類型*/
  12. aos_str_set(&options->config->endpoint, "<您的Endpoint>");
  13. aos_str_set(&options->config->access_key_id, "<您的AccessKeyId>");
  14. aos_str_set(&options->config->access_key_secret, "<您的AccessKeySecret>");
  15. /* 是否使用了CNAME */
  16. options->config->is_cname = 0;
  17. /* 用於設定網路相關參數,比如逾時時間等*/
  18. options->ctl = aos_http_controller_create(options->pool, 0);

Step-3. 新建儲存空間(Bucket)

以下代碼用於新建一個儲存空間:

  1. aos_pool_t *p;
  2. oss_request_options_t *options;
  3. aos_status_t *s;
  4. aos_table_t *resp_headers;
  5. oss_acl_e oss_acl = OSS_ACL_PRIVATE;
  6. char *bucket_name = "<您的bucket名字>";
  7. aos_string_t bucket;
  8. aos_pool_create(&p, NULL);
  9. options = oss_request_options_create(p);
  10. init_options(options);
  11. /* 將char*類型資料賦值給aos_string_t類型的bucket */
  12. aos_str_set(&bucket, bucket_name);
  13. s = oss_create_bucket(options, &bucket, oss_acl, &resp_headers);
  14. /* 判斷請求是否成功 */
  15. if (aos_status_is_ok(s)) {
  16. printf("create bucket succeeded\n");
  17. } else {
  18. printf("create bucket failed\n");
  19. }
  20. /* 執行完一個請求後,釋放這個記憶體池,相當於釋放了這個請求過程中各個部分分配的記憶體 */
  21. aos_pool_destroy(p);

說明:

  • Bucket的命名規範請查看OSS 基本概念
  • Bucket名稱不能與OSS中其他使用者已有的Bucket名稱重複。為避免建立失敗,您選擇的Bucket名稱必須全域唯一。
  • oss_create_bucket的傳回值是aos_status_t*類型,包括code(http code),error_code,error_msg和req_id,其中req_id可以協助調查問題。如果沒有特殊說明,其他介面均返回aos_status_t*類型。

Step-4. 上傳檔案

檔案是OSS中最基本的資料單元,以下代碼用於上傳檔案至OSS:

  1. aos_pool_t *p;
  2. oss_request_options_t *options;
  3. aos_status_t *s;
  4. aos_table_t *headers;
  5. aos_table_t *resp_headers;
  6. char *bucket_name = "<您的bucket名字>";
  7. char *object_name = "<您的object名字>";
  8. aos_string_t bucket;
  9. aos_string_t object;
  10. char *data = "object content";
  11. aos_list_t buffer;
  12. aos_buf_t *content;
  13. aos_pool_create(&p, NULL);
  14. /* 建立並初始化options */
  15. options = oss_request_options_create(p);
  16. init_options(options);
  17. /* 初始化參數 */
  18. aos_str_set(&object, object_name);
  19. aos_str_set(&bucket, bucket_name);
  20. headers = aos_table_make(p, 0);
  21. /* 將char*類型的資料轉換為oss_put_object_from_buffer介面需要的aos_list_t類型的 */
  22. aos_list_init(&buffer);
  23. content = aos_buf_pack(options->pool, data, strlen(data));
  24. aos_list_add_tail(&content->node, &buffer);
  25. /* 上傳檔案 */
  26. s = oss_put_object_from_buffer(options, &bucket, &object, &buffer, headers, &resp_headers);
  27. /* 判斷請求是否成功 */
  28. if (aos_status_is_ok(s)) {
  29. printf("put file succeeded\n");
  30. } else {
  31. printf("put file failed\n");
  32. }
  33. /* 釋放資源 */
  34. aos_pool_destroy(p);

說明:上傳檔案詳情請參見上傳檔案

Step-5. 列出儲存空間中的所有檔案

當您完成一系列檔案上傳後,可能需要查看某個儲存空間中有哪些檔案。以下代碼用於列出儲存空間中的所有檔案:

  1. aos_pool_t *p;
  2. oss_request_options_t *options;
  3. aos_status_t *s;
  4. aos_table_t *resp_headers;
  5. char *bucket_name = "<您的bucket名字>";
  6. aos_string_t bucket;
  7. oss_list_object_params_t *params;
  8. oss_list_object_content_t *content;
  9. int max_ret = 1000;
  10. char *key;
  11. aos_pool_create(&p, NULL);
  12. /* 建立並初始化options */
  13. options = oss_request_options_create(p);
  14. init_options(options);
  15. /* 初始化參數 */
  16. aos_str_set(&bucket, bucket_name);
  17. params = oss_create_list_object_params(p);
  18. params->max_ret = max_ret;
  19. aos_str_set(&params->prefix, "<prefix>");
  20. aos_str_set(&params->delimiter, "<delimiter>");
  21. aos_str_set(&params->marker, "<marker>");
  22. s = oss_list_object(options, &bucket, params, &resp_headers);
  23. /* 判斷請求是否成功 */
  24. if (aos_status_is_ok(s)) {
  25. printf("list file succeeded\n");
  26. } else {
  27. printf("list file failed\n");
  28. }
  29. /* 獲取每個檔案的名稱 */
  30. aos_list_for_each_entry(content, &params->object_list, node) {
  31. key = apr_psprintf(p, "%.*s", content->key.len, content->key.data);
  32. }
  33. /* 釋放資源 */
  34. aos_pool_destroy(p);

說明:其他參數配置詳情請參見管理檔案

Step-6. 下載指定檔案

以下代碼用於下載指定檔案:

  1. aos_pool_t *p;
  2. oss_request_options_t *options;
  3. aos_status_t *s;
  4. aos_table_t *headers;
  5. aos_table_t *resp_headers;
  6. char *bucket_name = "<您的bucket名字>";
  7. char *object_name = "<您的object名字>";
  8. aos_string_t bucket;
  9. aos_string_t object;
  10. aos_list_t buffer;
  11. aos_buf_t *content;
  12. char *buf;
  13. int64_t len = 0;
  14. int64_t size = 0;
  15. int64_t pos = 0;
  16. aos_pool_create(&p, NULL);
  17. /* 建立並初始化options */
  18. options = oss_request_options_create(p);
  19. init_options(options);
  20. /* 初始化參數 */
  21. aos_str_set(&object, object_name);
  22. aos_str_set(&bucket, bucket_name);
  23. headers = aos_table_make(p, 1);
  24. /* 下載檔案到buffer中 */
  25. aos_list_init(&buffer);
  26. s = oss_get_object_to_buffer(options, &bucket, &object, headers, &buffer, &resp_headers);
  27. /* 判斷請求是否成功 */
  28. if (aos_status_is_ok(s)) {
  29. printf("get file succeeded\n");
  30. } else {
  31. printf("get file failed\n");
  32. }
  33. /* 從buffer中將aos_list_t類型的資料轉為char*類型的,並計算讀到的檔案總長度 */
  34. len = aos_buf_list_len(&buffer);
  35. buf = aos_pcalloc(p, len + 1);
  36. buf[len] = '\0';
  37. aos_list_for_each_entry(content, &buffer, node) {
  38. size = aos_buf_size(content);
  39. memcpy(buf + pos, content->pos, size);
  40. pos += size;
  41. }
  42. /* 釋放資源 */
  43. aos_pool_destroy(p);

說明:下載檔案詳情請參見下載檔案