获取对象列表回调
使用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;
}