获取对象列表回调

使用SDK时可能需要传入各类回调函数以完成您想要实现的相关操作,本文介绍获取bucket中对象列表回调的编写示例。

功能:

  • 列举bucket中所有对象时的回调函数。

接口定义:

S3Status (S3ListBucketCallback)(int isTruncated,
                                        const char *nextMarker,
                                        int contentsCount, 
                                        const S3ListBucketContent *contents,
                                        int commonPrefixesCount,
                                        const char **commonPrefixes,
                                        void *callbackData);

参数:

参数名 类型 说明
isTruncated int 如果为true,表明一次无法全部获取list结果,后续可以通过Marker作为开始查询参数继续获取
nextMarker const char * 如果一次无法获取所有结果,响应中会包含此参数,标识该次请求的最后一个对象,用于列举后续对象
contentsCount int ListBucketContent中内容数量
contents S3ListBucketContent * 是一个ListBucketContent结构的数组,每个元素描述bucket中的一个对象
commonPrefixesCount int CommonPrefixes的数量
commonPrefixes const char * * 字符串数组,每个字符串指定一个服务返回的通用前缀
callbackData void * 回调数据

代码示例:

#include <time.h>
S3Status listBucketCallback(
    int isTruncated,
    const char *nextMarker,
    int contentsCount,
    const S3ListBucketContent *contents,
    int commonPrefixesCount,
    const char **commonPrefixes,
    void *callbackData)
{
    printf("%-22s", "      Object Name");
    printf("  %-5s  %-20s", "Size", "   Last Modified");
    printf("\n");
    printf("----------------------");
    printf("  -----"
           "  --------------------");
    printf("\n");

    for (int i = 0; i < contentsCount; i++)
    {
        char timebuf[256];
        char sizebuf[16];
        const S3ListBucketContent *content = &(contents[i]);
        time_t t = (time_t)content->lastModified;

        strftime(timebuf, sizeof(timebuf), "%Y-%m-%dT%H:%M:%SZ", gmtime(&t));
        sprintf(sizebuf, "%5llu", (unsigned long long)content->size);
        printf("%-22s  %s  %s\n", content->key, sizebuf, timebuf);
    }

    return S3StatusOK;
}