tencent cloud

文档反馈

存储桶操作

最后更新时间:2024-01-04 17:06:08

    简介

    本文档提供关于存储桶的基本操作和访问控制列表(ACL)的相关 API 概览以及 SDK 示例代码。
    注意
    建议用户 使用临时密钥 调用 SDK,通过临时授权的方式进一步提高 SDK 使用的安全性。申请临时密钥时,请遵循 最小权限指引原则,防止泄漏目标存储桶或对象之外的资源。
    如果您一定要使用永久密钥,建议遵循 最小权限指引原则 对永久密钥的权限范围进行限制。
    基本操作
    API
    操作名
    操作描述
    创建存储桶
    在指定账号下创建一个存储桶
    删除存储桶
    删除指定账号下的空存储桶
    检索存储桶及其权限
    API
    操作名
    操作描述
    检索存储桶及其权限
    检索存储桶是否存在且是否有权限访问

    基本操作

    创建存储桶

    功能说明

    在指定账号下创建一个存储桶。

    方法原型

    cos_status_t *cos_create_bucket(const cos_request_options_t *options,
    const cos_string_t *bucket,
    cos_acl_e cos_acl,
    cos_table_t **resp_headers);

    参数说明

    参数名称
    参数描述
    类型
    options
    COS 请求选项
    Struct
    bucket
    存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
    String
    cos_acl
    允许用户自定义权限。
    有效值:COS_ACL_PRIVATE(0),COS_ACL_PUBLIC_READ(1),COS_ACL_PUBLIC_READ_WRITE(2)
    默认值:COS_ACL_PRIVATE(0)
    Enum
    resp_headers
    返回 HTTP 响应消息的头域
    Struct

    返回结果说明

    返回结果
    描述
    类型
    code
    错误码
    Int
    error_code
    错误码内容
    String
    error_msg
    错误码描述
    String
    req_id
    请求消息 ID
    String

    示例

    #include "cos_http_io.h"
    #include "cos_api.h"
    #include "cos_log.h"
    #include <unistd.h>
    
    // endpoint 是 COS 访问域名信息,详情请参见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 文档
    static char TEST_COS_ENDPOINT[] = "cos.ap-guangzhou.myqcloud.com";
    // 开发者拥有的项目身份ID/密钥,可在 https://console.tencentcloud.com/cam/capi 页面获取
    static char *TEST_ACCESS_KEY_ID; //your secret_id
    static char *TEST_ACCESS_KEY_SECRET; //your secret_key
    // 开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源,可在 https://console.tencentcloud.com/cam/capi 页面获取
    static char TEST_APPID[] = "<APPID>"; //your appid
    //the cos bucket name, syntax: [bucket]-[appid], for example: mybucket-1253666666,可在 https://console.tencentcloud.com/cos5/bucket 查看
    static char TEST_BUCKET_NAME[] = "<bucketname-appid>";
    
    void log_status(cos_status_t *s)
    {
    cos_warn_log("status->code: %d", s->code);
    if (s->error_code) cos_warn_log("status->error_code: %s", s->error_code);
    if (s->error_msg) cos_warn_log("status->error_msg: %s", s->error_msg);
    if (s->req_id) cos_warn_log("status->req_id: %s", s->req_id);
    }
    
    void init_test_config(cos_config_t *config, int is_cname)
    {
    cos_str_set(&config->endpoint, TEST_COS_ENDPOINT);
    cos_str_set(&config->access_key_id, TEST_ACCESS_KEY_ID);
    cos_str_set(&config->access_key_secret, TEST_ACCESS_KEY_SECRET);
    cos_str_set(&config->appid, TEST_APPID);
    config->is_cname = is_cname;
    }
    
    void init_test_request_options(cos_request_options_t *options, int is_cname)
    {
    options->config = cos_config_create(options->pool);
    init_test_config(options->config, is_cname);
    options->ctl = cos_http_controller_create(options->pool, 0);
    }
    
    void test_create_bucket()
    {
    cos_pool_t *p = NULL;
    int is_cname = 0;
    cos_status_t *s = NULL;
    cos_request_options_t *options = NULL;
    cos_acl_e cos_acl = COS_ACL_PRIVATE;
    cos_string_t bucket;
    cos_table_t *resp_headers;
    
    //初始化请求选项
    cos_pool_create(&p, NULL);
    options = cos_request_options_create(p);
    init_test_request_options(options, is_cname);
    cos_str_set(&bucket, TEST_BUCKET_NAME);
    
    //创建存储桶
    s = cos_create_bucket(options, &bucket, cos_acl, &resp_headers);
    if (cos_status_is_ok(s)) {
    printf("create bucket succeeded\\n");
    } else {
    printf("create bucket failed\\n");
    }
    
    //销毁内存池
    cos_pool_destroy(p);
    }
    
    int main(int argc, char *argv[])
    {
    // 通过环境变量获取 SECRETID 和 SECRETKEY
    TEST_ACCESS_KEY_ID = getenv("COS_SECRETID");
    TEST_ACCESS_KEY_SECRET = getenv("COS_SECRETKEY");
    
    if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
    exit(1);
    }
    
    //set log level, default COS_LOG_WARN
    cos_log_set_level(COS_LOG_WARN);
    
    //set log output, default stderr
    cos_log_set_output(NULL);
    
    test_create_bucket();
    
    cos_http_io_deinitialize();
    
    return 0;
    }

    删除存储桶

    功能说明

    删除指定账号下的空存储桶。

    方法原型

    cos_status_t *cos_delete_bucket(const cos_request_options_t *options,
    const cos_string_t *bucket,
    cos_table_t **resp_headers);

    参数说明

    参数名称
    参数描述
    类型
    options
    COS 请求选项
    Struct
    bucket
    存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
    String
    resp_headers
    返回 HTTP 响应消息的头域
    Struct

    返回结果说明

    返回结果
    描述
    类型
    code
    错误码
    Int
    error_code
    错误码内容
    String
    error_msg
    错误码描述
    String
    req_id
    请求消息 ID
    String

    示例

    #include "cos_http_io.h"
    #include "cos_api.h"
    #include "cos_log.h"
    #include <unistd.h>
    
    // endpoint 是 COS 访问域名信息,详情请参见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 文档
    static char TEST_COS_ENDPOINT[] = "cos.ap-guangzhou.myqcloud.com";
    // 开发者拥有的项目身份ID/密钥,可在 https://console.tencentcloud.com/cam/capi 页面获取
    static char *TEST_ACCESS_KEY_ID; //your secret_id
    static char *TEST_ACCESS_KEY_SECRET; //your secret_key
    // 开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源,可在 https://console.tencentcloud.com/cam/capi 页面获取
    static char TEST_APPID[] = "<APPID>"; //your appid
    //the cos bucket name, syntax: [bucket]-[appid], for example: mybucket-1253666666,可在 https://console.tencentcloud.com/cos5/bucket 查看
    static char TEST_BUCKET_NAME[] = "<bucketname-appid>";
    
    void log_status(cos_status_t *s)
    {
    cos_warn_log("status->code: %d", s->code);
    if (s->error_code) cos_warn_log("status->error_code: %s", s->error_code);
    if (s->error_msg) cos_warn_log("status->error_msg: %s", s->error_msg);
    if (s->req_id) cos_warn_log("status->req_id: %s", s->req_id);
    }
    
    void init_test_config(cos_config_t *config, int is_cname)
    {
    cos_str_set(&config->endpoint, TEST_COS_ENDPOINT);
    cos_str_set(&config->access_key_id, TEST_ACCESS_KEY_ID);
    cos_str_set(&config->access_key_secret, TEST_ACCESS_KEY_SECRET);
    cos_str_set(&config->appid, TEST_APPID);
    config->is_cname = is_cname;
    }
    
    void init_test_request_options(cos_request_options_t *options, int is_cname)
    {
    options->config = cos_config_create(options->pool);
    init_test_config(options->config, is_cname);
    options->ctl = cos_http_controller_create(options->pool, 0);
    }
    
    void test_delete_bucket()
    {
    cos_pool_t *p = NULL;
    int is_cname = 0;
    cos_status_t *s = NULL;
    cos_request_options_t *options = NULL;
    cos_string_t bucket;
    cos_table_t *resp_headers;
    
    //初始化请求选项
    cos_pool_create(&p, NULL);
    options = cos_request_options_create(p);
    init_test_request_options(options, is_cname);
    cos_str_set(&bucket, TEST_BUCKET_NAME);
    
    //删除存储桶
    s = cos_delete_bucket(options, &bucket, &resp_headers);
    if (cos_status_is_ok(s)) {
    printf("create bucket succeeded\\n");
    } else {
    printf("create bucket failed\\n");
    }
    
    //销毁内存池
    cos_pool_destroy(p);
    }
    
    int main(int argc, char *argv[])
    {
    // 通过环境变量获取 SECRETID 和 SECRETKEY
    TEST_ACCESS_KEY_ID = getenv("COS_SECRETID");
    TEST_ACCESS_KEY_SECRET = getenv("COS_SECRETKEY");
    
    if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
    exit(1);
    }
    
    //set log level, default COS_LOG_WARN
    cos_log_set_level(COS_LOG_WARN);
    
    //set log output, default stderr
    cos_log_set_output(NULL);
    
    test_delete_bucket();
    
    cos_http_io_deinitialize();
    
    return 0;
    }

    判断存储桶是否存在

    功能说明

    检查存储桶是否存在,此接口实际是调用了HEAD Bucket API来检查对象是否存在的。

    方法原型

    cos_status_t *cos_check_bucket_exist(const cos_request_options_t *options,
    const cos_string_t *bucket,
    cos_bucket_exist_status_e *bucket_exist,
    cos_table_t **resp_headers)

    参数说明

    参数名称
    参数描述
    类型
    options
    COS 请求选项
    Struct
    bucket
    存储桶名称,存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
    String
    bucket_exist
    桶是否存在的枚举值,分为存在、不存在、未知状态(没有head到明确的状态)
    Enum
    resp_headers
    返回 HTTP 响应消息的头域
    Struct

    返回结果说明

    返回结果
    描述
    类型
    code
    错误码
    Int
    error_code
    错误码内容
    String
    error_msg
    错误码描述
    String
    req_id
    请求消息 ID
    String

    示例

    #include "cos_http_io.h"
    #include "cos_api.h"
    #include "cos_log.h"
    #include <unistd.h>
    
    // endpoint 是 COS 访问域名信息,详情请参见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 文档
    static char TEST_COS_ENDPOINT[] = "cos.ap-guangzhou.myqcloud.com";
    // 开发者拥有的项目身份ID/密钥,可在 https://console.tencentcloud.com/cam/capi 页面获取
    static char *TEST_ACCESS_KEY_ID; //your secret_id
    static char *TEST_ACCESS_KEY_SECRET; //your secret_key
    // 开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源,可在 https://console.tencentcloud.com/cam/capi 页面获取
    static char TEST_APPID[] = "<APPID>"; //your appid
    //the cos bucket name, syntax: [bucket]-[appid], for example: mybucket-1253666666,可在 https://console.tencentcloud.com/cos5/bucket 查看
    static char TEST_BUCKET_NAME[] = "<bucketname-appid>";
    
    void log_status(cos_status_t *s)
    {
    cos_warn_log("status->code: %d", s->code);
    if (s->error_code) cos_warn_log("status->error_code: %s", s->error_code);
    if (s->error_msg) cos_warn_log("status->error_msg: %s", s->error_msg);
    if (s->req_id) cos_warn_log("status->req_id: %s", s->req_id);
    }
    
    void init_test_config(cos_config_t *config, int is_cname)
    {
    cos_str_set(&config->endpoint, TEST_COS_ENDPOINT);
    cos_str_set(&config->access_key_id, TEST_ACCESS_KEY_ID);
    cos_str_set(&config->access_key_secret, TEST_ACCESS_KEY_SECRET);
    cos_str_set(&config->appid, TEST_APPID);
    config->is_cname = is_cname;
    }
    
    void init_test_request_options(cos_request_options_t *options, int is_cname)
    {
    options->config = cos_config_create(options->pool);
    init_test_config(options->config, is_cname);
    options->ctl = cos_http_controller_create(options->pool, 0);
    }
    
    void test_check_bucket_exist()
    {
    cos_pool_t *pool = NULL;
    int is_cname = 0;
    cos_status_t *status = NULL;
    cos_request_options_t *options = NULL;
    cos_string_t bucket;
    cos_table_t *resp_headers = NULL;
    cos_bucket_exist_status_e bucket_exist;
    
    //创建内存池
    cos_pool_create(&pool, NULL);
    
    //初始化请求选项
    options = cos_request_options_create(pool);
    init_test_request_options(options, is_cname);
    
    cos_str_set(&bucket, TEST_BUCKET_NAME);
    
    // 检查桶是否存在
    status = cos_check_bucket_exist(options, &bucket, &bucket_exist, &resp_headers);
    if (bucket_exist == COS_BUCKET_NON_EXIST) {
    printf("bucket: %.*s non exist.\\n", bucket.len, bucket.data);
    } else if (bucket_exist == COS_BUCKET_EXIST) {
    printf("bucket: %.*s exist.\\n", bucket.len, bucket.data);
    } else {
    printf("bucket: %.*s unknown status.\\n", bucket.len, bucket.data);
    log_status(status);
    }
    
    cos_pool_destroy(pool);
    }
    
    int main(int argc, char *argv[])
    {
    // 通过环境变量获取 SECRETID 和 SECRETKEY
    TEST_ACCESS_KEY_ID = getenv("COS_SECRETID");
    TEST_ACCESS_KEY_SECRET = getenv("COS_SECRETKEY");
    
    if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
    exit(1);
    }
    
    //set log level, default COS_LOG_WARN
    cos_log_set_level(COS_LOG_WARN);
    
    //set log output, default stderr
    cos_log_set_output(NULL);
    
    test_check_bucket_exist();
    
    cos_http_io_deinitialize();
    
    return 0;
    }
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持