对象存储 S3 C SDK 文档

公有云对象存储 S3 C SDK 文档

一 SDK说明

本文主要介绍 公有云对象存储 C语言 s3-API接口,包括:

  • 接口功能和调用方法
  • 接口数据类型的定义
  • 接口参数和返回值描述。

二 安装 SDK

C SDK 名为 libs3,有三种安装方式:

  • 包管理工具安装
  • 源码编译安装
  • 压缩包安装

2.1 包管理工具安装(不同系统使用工具有所区别)

  • CentOS、Redhat、fedora
sudo yum install -y libs3*
  • debian、ubuntu
sudo apt-get install -y libs3*

会安装 libs3、libs3-devel;
SDK依赖的头文件通常在 /usr/include/libs3.h
SDK依赖的动态库通常在 /usr/lib64/libs3.so.2.0
各个系统会有所差别

s3 help 
---------------------
s3 is a program for performing single requests to Amazon S3.

 Options:

   Command Line:
   .....

s3安装成功

  • 使用s3 工具,测试环境
  1. 配置环境变量
export S3_ACCESS_KEY_ID="your access key"
export S3_SECRET_ACCESS_KEY="your secret key"
export S3_HOSTNAME="your s3 server hostname"
  1. 运行示例
#获取用户所有的bucket信息
s3 -u list 
#获取 mybucket 下对象信息
s3 -u list mybucket 
  • 开发者调用libs3接口

请参照 示例代码
或参照下文

2.2 源码安装

由于libs3依赖libxml2和libcurl,所以需要先对其进行安装。

  • 安装依赖
  1. 步骤
    1、下载libxml2(2.9.2版本)
    2、编译安装libxml2
    3、下载libcurl(curl-7.48.0版本)
    4、编译安装libcurl
  2. 代码
cd;
wget ftp://xmlsoft.org/libxml2/libxml2-2.9.2.tar.gz;
tar -zxvf libxml2-2.9.2.tar.gz;
cd libxml2-2.9.2;
./configure;
make & make install

cd;
wget https://curl.haxx.se/download/curl-7.48.0.tar.gz
tar -zxvf curl-7.48.0.tar.gz
./configure --enable-shared
make 
make install
  • 以上依赖包亦可以通过包管理工具安装
  1. CentOS、Redhat、fedora
sudo yum install -y libxml2*
sudo yum install -y libcurl*
  1. debian、ubuntu
sudo apt-get install -y libxml2*
sudo apt-get install -y libcurl*

依赖包安装完成

  • 安装libs3库
  1. 步骤
    1、下载libs3-2.0.zip,https://github.com/bji/libs3/tree/2.0 解压
    2、进入libs3-2.0目录
    3、make
    4、make install
cd;
git clone https://github.com/bji/libs3/tree/2.0;
cd libs3-2.0;
make & make install
  1. 验证:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/libs3-2.0/build/lib ;
s3 help

输入s3命令,给出命令提示,则证明安装libs3成功。

2.3 压缩包安装

  • 联系中移物联网 开放平台部工作人员,获取压缩包centos*.zip(不同系统所需的库有所区别)

  • 解压sdk到某个目录得到 libs3及相关依赖库

  • 解压完成可以进入demo参考示例代码。其中s3.c包含了所有的示例,samples.c中包含了常用的示例。

可以通过修改makefile进行编译不同的示例代码。

  • 如果运行s3.c示例,需要配置sdk测试环境
export S3_ACCESS_KEY_ID="your access key"
export S3_SECRET_ACCESS_KEY="your secret key"
export S3_HOSTNAME="your s3 server hostname"
  • 运行示例程序

如:在demo目录下执行 ./s3 -u list 获取用户所有的bucket信息
./s3 -u list mybucket 获取bucket下对象信息
其他示例程序可以通过输入./s3 查看详细的帮助信息。

  • 如果运行samples.c示例,需要修改samples.c中以下内容:
const char *hostname = "your s3 server hostname";
static const char *accessKeyIdG = "your access key";
static const char *secretAccessKeyG = "your secret key";
  • 运行示例程序
#获取用户所有的bucket信息
cd ~/centosxx/demo/
./s3 -u list 

** 确认您已经理解对象存储基本概念,如s3BucketObjectEndpointAccessKeySecretKey等。**

三 公共接口

#include <libs3.h>

libs3实现、封装异步调用的S3接口,在调用不同的接口的时候,都需要进行初始化、设置回调等步骤,本节对这些公共步骤进行讲解。
*本节大部分示例代码引用自 s3.c

3.1 初始化

  • 接口描述
  1. 功能
    初始化,在调用具体s3接口函数之前必须先调用此函数对libs3进行初始化。

  2. 定义

S3Status S3_initialize(const char *userAgentInfo, int flags,
                       const char *defaultS3HostName);
  1. 参数
参数名 类型 说明
userAgentInfo const char * 请求中User-Agent header
flags Int 初始化S3依赖库的标志。
1:初始化
defaultS3Hostname const char * 默认服务地址
  • 示例代码
static void S3_init()
{
    S3Status status;
    const char *hostname = getenv("S3_SERVER_HOSTNAME");
    
    if ((status = S3_initialize("s3", S3_INIT_ALL, hostname)) != S3StatusOK) {
        fprintf(stderr, "Failed to initialize libs3: %s\n", S3_get_status_name(status));
        exit(-1);
    }
}

3.2 取消初始化

  • 接口描述
  1. 功能
    在调用初始化函数后,如不再使用s3,必须使用此函数进行取消初始化。

  2. 定义

void S3_deinitialize();
  1. 参数
  • 示例代码
S3_deinitialize();

3.3 获取错误信息

  • 接口描述
  1. 功能
    获取错误描述信息。

  2. 定义

const char *S3_get_status_name(S3Status status);
  1. 参数
参数名 类型 说明
status S3Status 错误码
  • 示例代码
printf(S3_get_status_name(status));

3.4 响应回调函数

  • 接口描述
  1. 功能
    响应完全接收时调用的回调函数。

  2. 定义

S3Status (S3ResponsePropertiesCallback) (const S3ResponseProperties *properties, void *callbackData);
  1. 参数
参数名 类型 说明
properties const S3ResponseProperties * 请求响应中可用的属性
callbackData void * 回调数据
  • 示例代码:
static S3Status responsePropertiesCallback
    (const S3ResponseProperties *properties, void *callbackData)
{
    (void) callbackData;

    if (!showResponsePropertiesG) {
        return S3StatusOK;
    }

#define print_nonnull(name, field)                                 \
    do {                                                           \
        if (properties-> field) {                                  \
            printf("%s: %s\n", name, properties-> field);          \
        }                                                          \
    } while (0)
    
    print_nonnull("Content-Type", contentType);
    print_nonnull("Request-Id", requestId);
    print_nonnull("Request-Id-2", requestId2);
    if (properties->contentLength > 0) {
        printf("Content-Length: %lld\n", 
               (unsigned long long) properties->contentLength);
    }
    print_nonnull("Server", server);
    print_nonnull("ETag", eTag);
    if (properties->lastModified > 0) {
        char timebuf[256];
        time_t t = (time_t) properties->lastModified;
        // gmtime is not thread-safe but we don't care here.
        strftime(timebuf, sizeof(timebuf), "%Y-%m-%dT%H:%M:%SZ", gmtime(&t));
        printf("Last-Modified: %s\n", timebuf);
    }
    int i;
    for (i = 0; i < properties->metaDataCount; i++) {
        printf("x-amz-meta-%s: %s\n", properties->metaData[i].name,
               properties->metaData[i].value);
    }

    return S3StatusOK;
}

3.5 响应完成回调函数

  • 接口描述
  1. 功能
    响应完成时回调该函数。

  2. 定义

void (S3ResponseCompleteCallback)(S3Status status, const S3ErrorDetails *errorDetails, void *callbackData);
  1. 参数
参数名 类型 说明
status S3Status 响应返回码
errorDetails const S3ErrorDetails * 错误描述的详细信息
callbackData void * 回调函数
  • 示例代码
static void responseCompleteCallback(S3Status status,
                                     const S3ErrorDetails *error, 
                                     void *callbackData)
{
    if (!callbackData) {
        //do something;
    }

    statusG = status;
    // Compose the error details message now, although we might not use it.
    // Can't just save a pointer to [error] since it's not guaranteed to last
    // beyond this callback
    int len = 0;
    if (error && error->message) {
        len += snprintf(&(errorDetailsG[len]), sizeof(errorDetailsG) - len,
                        "  Message: %s\n", error->message);
    }
    if (error && error->resource) {
        len += snprintf(&(errorDetailsG[len]), sizeof(errorDetailsG) - len,
                        "  Resource: %s\n", error->resource);
    }
    if (error && error->furtherDetails) {
        len += snprintf(&(errorDetailsG[len]), sizeof(errorDetailsG) - len,
                        "  Further Details: %s\n", error->furtherDetails);
    }
    if (error && error->extraDetailsCount) {
        len += snprintf(&(errorDetailsG[len]), sizeof(errorDetailsG) - len,
                        "%s", "  Extra Details:\n");
        int i;
        for (i = 0; i < error->extraDetailsCount; i++) {
            len += snprintf(&(errorDetailsG[len]), 
                            sizeof(errorDetailsG) - len, "    %s: %s\n", 
                            error->extraDetails[i].name,
                            error->extraDetails[i].value);
        }
    }
}

3.6 获取bucket列表回调函数

  • 接口描述
  1. 功能
    获取bucket列表的回调函数。

  2. 定义

S3Status (S3ListServiceCallback)(const char *ownerId, 
                                         const char *ownerDisplayName,
                                         const char *bucketName,
                                         int64_t creationDateSeconds,
                                         void *callbackData);
  1. 参数
参数名 类型 说明
ownerId const char * bucket拥有者的id
ownerDisplayName const char * bucket拥有者的显示名
bucketName const char * bucket名
creationDateSeconds int64_t 小于0,表明bucket没有创建时间;
大于0,代表bucket创建时间距unix纪元的秒数
callbackData void * 回调函数
  • 示例代码
static S3Status listServiceCallback(const char *ownerId, 
                                    const char *ownerDisplayName,
                                    const char *bucketName,
                                    int64_t creationDate, void *callbackData)
{
    list_service_data *data = (list_service_data *) callbackData;

    if (!data->headerPrinted) {
        data->headerPrinted = 1;
        printListServiceHeader(data->allDetails);
    }

    char timebuf[256];
    if (creationDate >= 0) {
        time_t t = (time_t) creationDate;
        strftime(timebuf, sizeof(timebuf), "%Y-%m-%dT%H:%M:%SZ", gmtime(&t));
    }
    else {
        timebuf[0] = 0;
    }

    printf("%-56s  %-20s", bucketName, timebuf);
    if (data->allDetails) {
        printf("  %-64s  %-12s", ownerId ? ownerId : "", 
               ownerDisplayName ? ownerDisplayName : "");
    }
    printf("\n");

    return S3StatusOK;
}

3.7 上传对象回调函数

  • 接口描述
  1. 功能
    进行上传对象操作时的回调函数。

  2. 定义

int (S3PutObjectDataCallback)(int bufferSize, char *buffer, void *callbackData);
  1. 参数
参数名 类型 说明
bufferSize int 缓存池最大的bytes数
buffer char * 对象内容的缓存区
callbackData void * 回调函数

示例代码:

static int putObjectDataCallback(int bufferSize, char *buffer, void *callbackData)
{
    put_object_callback_data *data = 
        (put_object_callback_data *) callbackData;
    
    int ret = 0;

    if (data->contentLength) {
        int toRead = ((data->contentLength > (unsigned) bufferSize) ?
                      (unsigned) bufferSize : data->contentLength);
        if (data->gb) {
            growbuffer_read(&(data->gb), toRead, &ret, buffer);
        }
        else if (data->infile) {
            ret = fread(buffer, 1, toRead, data->infile);
        }
    }

    data->contentLength -= ret;

    if (data->contentLength && !data->noStatus) {
        // Avoid a weird bug in MingW, which won't print the second integer
        // value properly when it's in the same call, so print separately
        printf("%llu bytes remaining ", 
               (unsigned long long) data->contentLength);
        printf("(%d%% complete) ...\n",
               (int) (((data->originalContentLength - 
                        data->contentLength) * 100) /
                      data->originalContentLength));
    }

    return ret;
}

3.8 获取对象回调函数

  • 接口描述
  1. 功能
    获取对象时的回调函数。

  2. 定义

S3Status (S3GetObjectDataCallback)(int bufferSize, const char *buffer, void *callbackData);
  1. 参数
参数名 类型 说明
bufferSize int 缓存池最大的bytes数
buffer const char * 对象内容的缓存区
callbackData void * 回调函数
  • 示例代码
static S3Status getObjectDataCallback(int bufferSize, const char *buffer,
                                      void *callbackData)
{
    FILE *outfile = (FILE *) callbackData;

    size_t wrote = fwrite(buffer, 1, bufferSize, outfile);
    
    return ((wrote < (size_t) bufferSize) ? 
            S3StatusAbortedByCallback : S3StatusOK);
}

3.9 list bucket中对象回调函数

  • 接口描述
  1. 功能
    列举bucket中对象时的回调函数。

  2. 定义

S3Status (S3ListBucketCallback)(int isTruncated,
                                        const char *nextMarker,
                                        int contentsCount, 
                                        const S3ListBucketContent *contents,
                                        int commonPrefixesCount,
                                        const char **commonPrefixes,
                                        void *callbackData);
  1. 参数
参数名 类型 说明
isTruncated int 如果为true,表明一次无法全部获取list结果,后续可以通过Marker作为开始查询参数继续获取
nextMarker const char * 一次无法获取所有结果,响应中包含此参数,标识本次请求的最后一个对象,用于列举后续对象
contentsCount int ListBucketContent中内容数量
contents S3ListBucketContent * 桶内对象信息的结构体指针
commonPrefixesCount int CommonPrefixes的数量
commonPrefixes const char * * list结果过滤前缀
callbackData void * 回调函数
  • 示例代码
static S3Status listBucketCallback(int isTruncated, const char *nextMarker,
                                   int contentsCount, 
                                   const S3ListBucketContent *contents,
                                   int commonPrefixesCount,
                                   const char **commonPrefixes,
                                   void *callbackData)
{
    list_bucket_callback_data *data = 
        (list_bucket_callback_data *) callbackData;

    data->isTruncated = isTruncated;
    // This is tricky.  S3 doesn't return the NextMarker if there is no
    // delimiter.  Why, I don't know, since it's still useful for paging
    // through results.  We want NextMarker to be the last content in the
    // list, so set it to that if necessary.
    if ((!nextMarker||!nextMarker[0]) && contentsCount) {
        nextMarker = contents[contentsCount - 1].key;
    }
    if (nextMarker) {
        snprintf(data->nextMarker, sizeof(data->nextMarker), "%s", 
                 nextMarker);
    }
    else {
        data->nextMarker[0] = 0;
    }
    
    if (contentsCount && !data->keyCount) {
        printListBucketHeader(data->allDetails);
    }

    int i;
    for (i = 0; i < contentsCount; i++) {
        const S3ListBucketContent *content = &(contents[i]);
        char timebuf[256];
        if (0) {
            time_t t = (time_t) content->lastModified;
            strftime(timebuf, sizeof(timebuf), "%Y-%m-%dT%H:%M:%SZ",
                     gmtime(&t));
            printf("\nKey: %s\n", content->key);
            printf("Last Modified: %s\n", timebuf);
            printf("ETag: %s\n", content->eTag);
            printf("Size: %llu\n", (unsigned long long) content->size);
            if (content->ownerId) {
                printf("Owner ID: %s\n", content->ownerId);
            }
            if (content->ownerDisplayName) {
                printf("Owner Display Name: %s\n", content->ownerDisplayName);
            }
        }
        else {
            time_t t = (time_t) content->lastModified;
            strftime(timebuf, sizeof(timebuf), "%Y-%m-%dT%H:%M:%SZ", 
                     gmtime(&t));
            char sizebuf[16];
            if (content->size < 100000) {
                sprintf(sizebuf, "%5llu", (unsigned long long) content->size);
            }
            else if (content->size < (1024 * 1024)) {
                sprintf(sizebuf, "%4lluK", 
                        ((unsigned long long) content->size) / 1024ULL);
            }
            else if (content->size < (10 * 1024 * 1024)) {
                float f = content->size;
                f /= (1024 * 1024);
                sprintf(sizebuf, "%1.2fM", f);
            }
            else if (content->size < (1024 * 1024 * 1024)) {
                sprintf(sizebuf, "%4lluM", 
                        ((unsigned long long) content->size) / 
                        (1024ULL * 1024ULL));
            }
            else {
                float f = (content->size / 1024);
                f /= (1024 * 1024);
                sprintf(sizebuf, "%1.2fG", f);
            }
            printf("%-50s  %s  %s", content->key, timebuf, sizebuf);
            if (data->allDetails) {
                printf("  %-34s  %-64s  %-12s",
                       content->eTag, 
                       content->ownerId ? content->ownerId : "",
                       content->ownerDisplayName ? 
                       content->ownerDisplayName : "");
            }
            printf("\n");
        }
    }

    data->keyCount += contentsCount;

    for (i = 0; i < commonPrefixesCount; i++) {
        printf("\nCommon Prefix: %s\n", commonPrefixes[i]);
    }

    return S3StatusOK;
}

四 bucket操作

4.1 test bucket

  • 接口描述
  1. 功能
    检查bucket是否存在,如果存在则返回bucket的location。

  2. 定义

void S3_test_bucket(S3Protocol protocol, S3UriStyle uriStyle,
                    const char *accessKeyId, const char *secretAccessKey,
                    const char *hostName, const char *bucketName,
                    int locationConstraintReturnSize,
                    char *locationConstraintReturn,
                    S3RequestContext *requestContext,
                    const S3ResponseHandler *handler, void *callbackData);
  1. 参数
参数名 类型 说明 约束
protocol S3Protocol 请求使用的协议 必选
uriStyle S3UriStyle 请求使用的URI方式 必选
accessKeyId const char * 用户的接入证书 必选
secretAccessKey const char * 安全证书 必选
hostName const char * 请求使用的主机名 必选
bucketName const char * bucket名 必选
locationConstraintReturnSize int 区域位置缓冲区的大小(byte) 必选
locationConstraintReturn char * 区域位置缓冲区 必选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 可选

4.2 create bucket

  • 接口描述
  1. 功能
    创建bucket。

  2. 定义

void S3_create_bucket(S3Protocol protocol, const char *accessKeyId,
                      const char *secretAccessKey, const char *hostName,
                      const char *bucketName, S3CannedAcl cannedAcl,
                      const char *locationConstraint,
                      S3RequestContext *requestContext,
                      const S3ResponseHandler *handler, void *callbackData);
  1. 参数
参数名 类型 说明 约束
protocol S3Protocol 请求使用的协议 必选
accessKeyId const char * 用户的接入证书 必选
secretAccessKey const char * 安全证书 必选
hostName const char * 请求使用的主机名 必选
bucketName const char * bucket名 必选
cannedAcl S3CannedAcl 创建bucket时权限 可选
locationConstraint const char * 区域位置缓冲区 可选
requestContext S3RequestContext * 请求参数 必选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 可选

4.3 delete bucket

  • 接口描述
  1. 功能
    删除一个已经存在的bucket。
    *必须是空bucket才能删除

  2. 定义

void S3_delete_bucket(S3Protocol protocol, S3UriStyle uriStyle,
                      const char \*accessKeyId, const char \*secretAccessKey,
                      const char \*hostName, const char \*bucketName,
                      S3RequestContext \*requestContext,
                      const S3ResponseHandler \*handler, void \*callbackData);
  1. 参数
参数名 类型 说明 约束
protocol S3Protocol 请求使用的协议 必选
uriStyle S3UriStyle 请求使用的URI方式 必选
accessKeyId const char * 用户的接入证书 必选
secretAccessKey const char * 安全证书 必选
hostName const char * 请求使用的主机名 必选
bucketName const char * bucket名 必选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 可选

4.4 list bucket

  • 接口描述
  1. 功能
    列举bucket中所有的对象。

  2. 定义

void S3_list_bucket(const S3BucketContext \*bucketContext,
                    const char \*prefix, const char \*marker, 
                    const char \*delimiter, int maxkeys,
                    S3RequestContext \*requestContext,
                    const S3ListBucketHandler \*handler, void \*callbackData);
  1. 参数
参数名 类型 说明 约束
bucketContext const S3BucketContext * bucket及请求参数 必选
prefix const char * 对象过滤前缀,列举以指定的字符串prefix开头的对象 可选
marker const char * 列举桶内对象列表时,指定一个标识符,返回的对象列表将是按照字典顺序排序后这个标识符以后的所有对象 可选
delimiter const char * 过滤符号,用来分组桶内对象的字符串。如果字符串delimiter和字符串prefix之间的字符序列相同,则这部分字符序列合并在一起,在返回信息的CommonPrefixes节点显示 可选
maxkeys int 返回对象的最大数量 可选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 可选

五 object操作

5.1 put object

  • 接口描述
  1. 功能
    上传对象。

  2. 定义

void S3_put_object(const S3BucketContext \*bucketContext, const char \*key,
                   uint64_t contentLength,
                   const S3PutProperties \*putProperties,
                   S3RequestContext \*requestContext,
                   const S3PutObjectHandler \*handler, void \*callbackData);
  1. 参数
参数名 类型 说明 约束
bucketContext const S3BucketContext * bucket及请求参数 必选
key const char * 将上传对象的名 必选
contentLength uint64_t 将上传对象的大小(byte) 必选
putProperties const S3PutProperties * 请求消息头 必选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 可选

5.2 copy object

  • 接口描述
  1. 功能
    拷贝对象到目标桶并命名。

  2. 定义

void S3_copy_object(const S3BucketContext \*bucketContext,
                    const char \*key, const char \*destinationBucket,
                    const char \*destinationKey,
                    const S3PutProperties \*putProperties,
                    int64_t \*lastModifiedReturn, int eTagReturnSize,
                    char \*eTagReturn, S3RequestContext \*requestContext,
                    const S3ResponseHandler \*handler, void \*callbackData);
  1. 参数
参数名 类型 说明 约束
bucketContext const S3BucketContext * 源bucket及请求参数 必选
key const char * 将拷贝的对象名 必选
destinationBucket const char * 拷贝的目的bucket 必选
destinationKey const char * 目的对象名 必选
putProperties const S3PutProperties * 请求消息头 可选
lastModifiedReturn int64_t * 对象上次修改时间 必选
eTagReturnSize int eTag缓存区大小 必选
eTagReturn char * eTag缓存区 必选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 可选

5.3 get object

  • 接口描述
  1. 功能
    下载对象。
  2. 定义
void S3_get_object(const S3BucketContext \*bucketContext, const char \*key,
                   const S3GetConditions \*getConditions,
                   uint64_t startByte, uint64_t byteCount,
                   S3RequestContext \*requestContext,
                   const S3GetObjectHandler \*handler, void \*callbackData);
  1. 参数
参数名 类型 说明 说明
bucketContext const S3BucketContext * bucket及请求参数 必选
key const char * 将上传对象的名 必选
getConditions const S3GetConditions * 成功返回条件 必选
startByte uint64_t 开始位置 必选
byteCount uint64_t 总长度 必选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 必选

5.4 head object

  • 接口描述
  1. 功能
    获取对象的属性值。

  2. 定义

void S3_head_object(const S3BucketContext \*bucketContext, const char \*key,
                    S3RequestContext \*requestContext,
                    const S3ResponseHandler \*handler, void \*callbackData);
  1. 参数
参数名 类型 说明 约束
bucketContext const S3BucketContext * bucket及请求参数 必选
key const char * 将上传对象的名 必选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 必选

5.5 delete object

  • 接口描述
  1. 功能
    删除对象。

  2. 定义

void S3_delete_object(const S3BucketContext \*bucketContext, const char \*key,
                      S3RequestContext \*requestContext,
                      const S3ResponseHandler \*handler, void \*callbackData);
  1. 参数
参数名 类型 说明 约束
bucketContext const S3BucketContext * bucket及请求参数 必选
key const char * 将上传对象的名 必选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 必选

六 访问控制列表操作

6.1 get acl

  • 接口描述
  1. 功能
    获取bucket或object的访问控制权限。

  2. 定义

void S3_get_acl(const S3BucketContext \*bucketContext, const char \*key, 
                char \*ownerId, char \*ownerDisplayName,
                int \*aclGrantCountReturn, S3AclGrant \*aclGrants, 
                S3RequestContext \*requestContext,
                const S3ResponseHandler \*handler, void \*callbackData);
  1. 参数
参数名 类型 说明 约束
bucketContext const S3BucketContext * bucket及请求参数 必选
key const char * 将上传对象的名 必选
ownerId char * 拥有者id 必选
ownerDisplayName char * 拥有者名称 必选
aclGrantCountReturn int * 返回S3AclGrant的个数 必选
aclGrants S3AclGrant * 权限信息结构图指针 必选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 可选

6.2 set acl

  • 接口描述
  1. 功能
    设置bucket或object的权限。

  2. 定义

void S3_set_acl(const S3BucketContext \*bucketContext, const char \*key, 
                const char \*ownerId, const char \*ownerDisplayName,
                int aclGrantCount, const S3AclGrant \*aclGrants, 
                S3RequestContext \*requestContext,
                const S3ResponseHandler \*handler, void \*callbackData);
  1. 参数
参数名 类型 说明 说明
bucketContext const S3BucketContext * bucket及请求参数 必选
key const char * 将上传对象的名 必选
ownerId char * 拥有者id 可选
ownerDisplayName char * 拥有者名称 可选
aclGrantCount int 返回S3AclGrant的个数 必选
aclGrants const S3AclGrant * 权限信息结构图指针 必选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 可选

七 服务访问日志管理

7.1 get_server_access_logging

  • 接口描述
  1. 功能
    获取一个bucket的服务访问日志配置。

  2. 定义

void S3_get_server_access_logging(const S3BucketContext \*bucketContext,
                                  char \*targetBucketReturn,
                                  char \*targetPrefixReturn,
                                  int \*aclGrantCountReturn, 
                                  S3AclGrant \*aclGrants,
                                  S3RequestContext \*requestContext,
                                  const S3ResponseHandler \*handler,
                                  void \*callbackData);
  1. 参数
参数名 类型 说明 约束
bucketContext const S3BucketContext * bucket及请求参数 必选
targetBucketReturn char * 在生成日志时,源桶的owner可以指定
一个目标桶,将生成的所有日志放到该桶中
必选
targetPrefixReturn char * 通过该元素可以指定一个前缀
给一类日志生成的对象
必选
aclGrantCountReturn int * 返回S3AclGrant的个数 必选
aclGrants S3AclGrant * 权限信息结构图指针 必选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 可选

7.2 set_server_access_logging

  • 接口描述
  1. 功能
    设置一个bucket的服务访问日志配置。

  2. 定义

void S3_set_server_access_logging(const S3BucketContext \*bucketContext,
                                  const char \*targetBucket, 
                                  const char \*targetPrefix, int aclGrantCount, 
                                  const S3AclGrant \*aclGrants, 
                                  S3RequestContext \*requestContext,
                                  const S3ResponseHandler \*handler,
                                  void \*callbackData);
  1. 参数
参数名 类型 说明 约束
bucketContext const S3BucketContext * bucket及请求参数 必选
targetBucket const char * 在生成日志时,源桶的owner可以指定一个目标桶,
将生成的所有日志放到该桶中
必选
targetPrefix const char * 通过该元素可以指定一个前缀给一类日志生成的对象 必选
aclGrantCount int 返回S3AclGrant的个数 必选
aclGrants S3AclGrant * 权限信息结构图指针 必选
requestContext S3RequestContext * 请求参数 可选
handler const S3ResponseHandler * 回调函数 必选
callbackData void * 回调数据 可选
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342