关于rgw S3 API S3-style subdomain

本文深入探讨了RGW S3 API的两种访问形式——S3-stylesubdomain与普通pathurl,并通过C/C++库展示了如何在实际应用中实现这两种访问形式。重点介绍了如何构造S3BucketContext结构体以适应不同的访问需求,并通过示例代码说明了具体操作过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于rgw S3 libs3 (C/C++) S3-style subdomain接口访问

rgw 的S3 api是兼容S3,同样也提供了S3的特殊访问形式。

S3的两种访问形式:

1.Virtual Host: ${protocol}://${bucket}.s3.amazonaws.com/[${key}]    (s3-style subdomain)
2.Path: ${protocol}://s3.amazonaws.com/${bucket}/[${key}]     (普通path url访问形式)  
以上两种方式在rgw中目前都是可以使用的。

关于S3 libs3(C/C++)API库,对两种访问形式的实现及使用:

在调用libs3的接口,需要指明你使用的s3 api的访问形式,该形式的可以通过指定已定义的枚举常量来标识;其常量定义如下:

typedef enum
{
    S3UriStyleVirtualHost               = 0, //标识使用Virtual host的访问形式
    S3UriStylePath                      = 1  //path 访问形式
} S3UriStyle;

例如:S3中删除一个object的操作:

void S3_delete_object(const S3BucketContext *bucketContext, const char *key,
                      S3RequestContext *requestContext,
                      const S3ResponseHandler *handler, void *callbackData)
  1. 使用virtual host的访问形式

构造S3BucketContext结构体:

S3BucketContext bucketContext =
    {
        "www.aaa.cn",
        "ssss",
        S3ProtocolHTTP,
        S3UriStyleVirtualHost,
        "AD9DL40533G8EFF6YOJ4",
        "hJi8K7qzIrEeFwwBWcxuv28yBLaCAtRjaOhTljCs",
        0
    };

    S3ResponseHandler responseHandler =
    {
        0,
        &responseCompleteCallback
    };
删除eof这个对象。
S3_delete_object(&bucketContext, "eof", 0, &responseHandler, 0);

注:使用这种访问形式,用户(客户端)必须要对ssss.www.aaa.cn能够解析到rgw服务;因为在client端发出请求时是对ssss.www.aaa.cn解析的(delete http://ssss.www.aaa.cn/eof)。

  1. 使用path url普通访问形式

构造S3BucketContext结构体:

S3BucketContext bucketContext =
    {
        "www.aaa.cn",
        "ssss",
        S3ProtocolHTTP,
        S3UriStylePath,
        "AD9DL40533G8EFF6YOJ4",
        "hJi8K7qzIrEeFwwBWcxuv28yBLaCAtRjaOhTljCs",
        0
    };

    S3ResponseHandler responseHandler =
    {
        0,
        &responseCompleteCallback
    };

删除eof这个对象。

S3_delete_object(&bucketContext, "eof", 0, &responseHandler, 0);

注:使用这种普通访问形式,用户(客户端)必须要对www.aaa.cn能够解析到rgw服务;因为在client端发出请求时是对www.aaa.cn解析的(delete http://www.aaa.cn/ssss/eof)。

特殊实例

libs3的某些接口是不支持Virtual Host(s3-style subdomain)访问形式,如:
列出属于该用户(access_key)的所有buckets

void S3_list_service(S3Protocol protocol, const char *accessKeyId,
                     const char *secretAccessKey, const char *securityToken,
                     const char *hostName, S3RequestContext *requestContext,
                     const S3ListServiceHandler *handler,
                     void *callbackData);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值