简介
本文介绍对象存储 COS 通过 Android SDK 实现列出对象的示例代码和描述。
注意事项
若您要使用列出对象功能,需要先具有目标桶的读取权限:在您进行 授权策略 时,action 需要设置为
cos:GetBucket
,更多授权请参见 支持CAM的业务接口。若您要使用列出对象历史版本功能,需要先具有目标桶的读取权限:在您进行 授权策略 时,action 需要设置为
cos:GetBucketObjectVersions
,更多授权请参见 支持CAM的业务接口。相关示例
功能名称 | 描述 | 示例代码 |
列出对象 | 提供了查询存储桶下的部分或者全部对象的能力。 | |
列出对象历史版本 | 提供了查询存储桶下的部分或者全部对象及其历史版本信息的能力。 |
查询对象列表
查询存储桶下的部分或者全部对象。
前期准备:创建 CosXmlService
使用案例:获取第一页数据
String bucketName = "examplebucket-1250000000"; //格式:BucketName-APPID;final GetBucketRequest getBucketRequest = new GetBucketRequest(bucketName);// 前缀匹配,用来规定返回的对象前缀地址getBucketRequest.setPrefix("dir/");// 单次返回最大的条目数量,默认1000getBucketRequest.setMaxKeys(100);cosXmlService.getBucketAsync(getBucketRequest, new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {GetBucketResult getBucketResult = (GetBucketResult) result;if (getBucketResult.listBucket.isTruncated) {// 表示数据被截断,需要拉取下一页数据prevPageResult = getBucketResult;}}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest cosXmlRequest,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});
使用案例:请求下一页数据
String bucketName = "examplebucket-1250000000"; //格式:BucketName-APPID;GetBucketRequest getBucketRequest = new GetBucketRequest(bucketName);// 前缀匹配,用来规定返回的对象前缀地址getBucketRequest.setPrefix("dir/");// prevPageResult 是上一页的返回结果,这里的 nextMarker 表示下一页的起始位置String nextMarker = prevPageResult.listBucket.nextMarker;getBucketRequest.setMarker(nextMarker);// 单次返回最大的条目数量,默认1000getBucketRequest.setMaxKeys(100);cosXmlService.getBucketAsync(getBucketRequest, new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {GetBucketResult getBucketResult = (GetBucketResult) result;if (getBucketResult.listBucket.isTruncated) {// 表示数据被截断,需要拉取下一页数据}}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest cosXmlRequest,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});
使用案例:获取对象列表与子目录
String bucketName = "examplebucket-1250000000"; //格式:BucketName-APPID;GetBucketRequest getBucketRequest = new GetBucketRequest(bucketName);// 前缀匹配,用来规定返回的对象前缀地址getBucketRequest.setPrefix("dir/");// 单次返回最大的条目数量,默认1000getBucketRequest.setMaxKeys(100);// 定界符为一个符号,如果有 Prefix,// 则将 Prefix 到 delimiter 之间的相同路径归为一类,定义为 Common Prefix,// 然后列出所有 Common Prefix。如果没有 Prefix,则从路径起点开始getBucketRequest.setDelimiter("/");cosXmlService.getBucketAsync(getBucketRequest, new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {GetBucketResult getBucketResult = (GetBucketResult) result;}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest cosXmlRequest,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});
查询对象历史版本列表
查询开启版本控制的存储桶下的部分或者全部对象。
前期准备:创建 CosXmlService
使用案例:获取对象历史版本列表第一页数据
String bucketName = "examplebucket-1250000000"; //格式:BucketName-APPID;final GetBucketObjectVersionsRequest getBucketRequest =new GetBucketObjectVersionsRequest(bucketName);// 前缀匹配,用来规定返回的对象前缀地址getBucketRequest.setPrefix("dir/");// 单次返回最大的条目数量,默认1000getBucketRequest.setMaxKeys(100);cosXmlService.getBucketObjectVersionsAsync(getBucketRequest,new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {GetBucketObjectVersionsResult getBucketResult =(GetBucketObjectVersionsResult) result;if (getBucketResult.listVersionResult.isTruncated) {// 表示数据被截断,需要拉取下一页数据prevPageResult = getBucketResult;}}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest cosXmlRequest,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});
使用案例:获取对象历史版本列表下一页数据
String bucketName = "examplebucket-1250000000"; //格式:BucketName-APPID;final GetBucketObjectVersionsRequest getBucketRequest =new GetBucketObjectVersionsRequest(bucketName);// 前缀匹配,用来规定返回的对象前缀地址getBucketRequest.setPrefix("dir/");// 单次返回最大的条目数量,默认1000getBucketRequest.setMaxKeys(100);// prevPageResult 是上一页的返回结果,这里的 nextMarker 与 nextVersionIdMarker// 表示下一页的起始位置getBucketRequest.setKeyMarker(prevPageResult.listVersionResult.nextKeyMarker);getBucketRequest.setVersionIdMarker(prevPageResult.listVersionResult.nextVersionIdMarker);cosXmlService.getBucketObjectVersionsAsync(getBucketRequest,new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {GetBucketObjectVersionsResult getBucketResult =(GetBucketObjectVersionsResult) result;if (getBucketResult.listVersionResult.isTruncated) {// 表示数据被截断,需要拉取下一页数据prevPageResult = getBucketResult;}}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest cosXmlRequest,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});
SDK API 参考
API 操作
关于列出对象的 API 接口说明,请参见 List Objects 文档。
关于列出对象历史版本的 API 接口说明,请参见 List Object versions 文档。