搜索本产品文档关键词
查看Bucket中的Object
所有文档
menu

BOS 对象存储

查看Bucket中的Object

简单查询

查看Bucket中Object列表。

基本流程

  1. 创建BOSClient类的实例。
  2. 执行BOSClient.listObjects(bucketName)方法,会返回ListObjectsResponse类的实例。
  3. 对ListObjectsResponse类型可以进行getBuckets()/getOwner()/getMetadata()操作。

示例代码

Java
1// 获取指定Bucket下的所有Object信息
2ListObjectsResponse listing = client.listObjects(<BucketName>);
3
4// 遍历所有Object
5for (BosObjectSummary objectSummary : listing.getContents()) {
6    System.out.println("ObjectKey: " + objectSummary.getKey());
7}

说明: listObjects( )方法返回ListObjectsResponse对象,ListObjectsResponse对象包含了此次listObject请求的返回结果。用户可以通过ListObjectsResponse中的getContents方法获取所有Object的描述信息。

  • 默认情况下,如果Bucket中的Object数量大于1000,则只会返回1000个Object,并且返回结果中IsTruncated值为True,并返回NextMarker做为下次读取的起点。
  • 若想获取更多的Object,可以使用Marker参数分次读取,请参考扩展查询

完整示例

Java
1import android.app.Activity;
2import android.os.Bundle;
3import com.baidubce.BceClientException;
4import com.baidubce.BceServiceException;
5import com.baidubce.auth.DefaultBceCredentials;
6import com.baidubce.demo.R;
7import com.baidubce.services.bos.BosClient;
8import com.baidubce.services.bos.BosClientConfiguration;
9import com.baidubce.services.bos.model.BosObjectSummary;
10import com.baidubce.services.bos.model.ListObjectsResponse;
11
12public class ExampleActivity extends Activity {
13
14private String bucketName = <BucketName>;
15
16@Override
17protected void onCreate(Bundle savedInstanceState) {
18    super.onCreate(savedInstanceState);
19    setContentView(R.layout.activity_main);
20    new Thread(new Runnable() {
21        @Override
22        public void run() {
23            try {
24                BosClientConfiguration config = new BosClientConfiguration();
25                config.setCredentials(new DefaultBceCredentials(<AccessKeyId>, <SecretAccessKey>));
26                config.setEndpoint(<EndPoint>);
27                BosClient client = new BosClient(config);
28
29                // 获取指定Bucket下的所有Object信息
30                ListObjectsResponse listing = client.listObjects(<BucketName>);
31
32                // 遍历所有Object
33                for (BosObjectSummary objectSummary : listing.getContents()) {
34                    System.out.println("ObjectKey: " + objectSummary.getKey());
35                }               	                    
36
37            } catch (BceServiceException e) {
38                System.out.println("Error ErrorCode: " + e.getErrorCode());
39                System.out.println("Error RequestId: " + e.getRequestId());
40                System.out.println("Error StatusCode: " + e.getStatusCode());
41                System.out.println("Error Message: " + e.getMessage());
42                System.out.println("Error ErrorType: " + e.getErrorType());
43            } catch (BceClientException e) {
44                System.out.println("Error Message: " + e.getMessage());
45            }
46        }
47    }).start();
48}}

扩展查询

用户可以通过设置ListObjectsRequest参数来完成更多扩展查询操作设置。ListObjectsRequest中可以设置的扩展参数如下:

参数名称
说明
默认值
MaxKeys 设定此次返回Object的最大个数,不可超过1000。 1000
Prefix 设定objectKey的前缀,前缀是指objectKey包含并以Prefix的值作为开始。
通常与Delimiter配合在查询模拟文件夹中使用。
-
Delimiter 是一个分隔符,用来对objectKey进行分层。
通常与Prefix配合在查询模拟文件夹中使用。
从Prefix开始到第一次出现Delimiter字符之间的objectKey称为:CommonPrefixes。
-
Marker 是一个字符串,用来设定返回结果的起始位置。
设定Marker值之后,返回的Object会从Marker值之后按字母排序开始返回。
-

基本流程

  1. 创建ListObjectsRequest类的实例。
  2. 在ListObjectsRequest中执行setDelimiter/setMarker()/setPrefix()等方法,实现更多的扩展查询操作。
  3. 创建BOSClient类的实例,执行listObjects(listObjectsRequest)。

示例代码

Java
1// 构造ListObjectsRequest请求
2ListObjectsRequest listObjectsRequest = new ListObjectsRequest(<BucketName>);  
3
4// 设置扩展查询参数
5listObjectsRequest.setDelimiter(<Delimiter>);
6listObjectsRequest.setMarker(<Marker>);
7...   
8ListObjectsResponse listing = client.listObjects(listObjectsRequest);

说明:上面代码中调用了 listObjects 中的一个重载方法,通过传入 ListObjectsRequest 来完成请求。

完整示例

示例一:

Java
1import android.app.Activity;
2import android.os.Bundle;
3import com.baidubce.BceClientException;
4import com.baidubce.BceServiceException;
5import com.baidubce.auth.DefaultBceCredentials;
6import com.baidubce.demo.R;
7import com.baidubce.services.bos.BosClient;
8import com.baidubce.services.bos.BosClientConfiguration;
9import com.baidubce.services.bos.model.BosObjectSummary;
10import com.baidubce.services.bos.model.ListObjectsRequest;
11import com.baidubce.services.bos.model.ListObjectsResponse;
12
13public class ExampleActivity extends Activity {
14
15private String bucketName = <BucketName>;
16
17@Override
18protected void onCreate(Bundle savedInstanceState) {
19    super.onCreate(savedInstanceState);
20    setContentView(R.layout.activity_main);
21    new Thread(new Runnable() {
22        @Override
23        public void run() {
24            try {
25                BosClientConfiguration config = new BosClientConfiguration();
26                config.setCredentials(new DefaultBceCredentials(<AccessKeyID>, <SecretAccessKey>));
27                config.setEndpoint(<EndPoint>);
28                BosClient client = new BosClient(config);
29
30                // 构造ListObjectsRequest请求
31                ListObjectsRequest listObjectsRequest = new ListObjectsRequest(<BucketName>); 
32
33                // 设置参数
34                listObjectsRequest.setDelimiter("/");
35                listObjectsRequest.setMarker("123");
36                listObjectsRequest.setMaxKeys(100);
37                listObjectsRequest.setPrefix("fun");
38
39                // 获取指定Bucket下符合上述条件的所有Object信息
40                ListObjectsResponse listing = client.listObjects(listObjectsRequest);
41
42                // 遍历所有Object
43                for (BosObjectSummary objectSummary : listing.getContents()) {
44                    System.out.println("ObjectKey: " + objectSummary.getKey());
45                }                	
46
47            } catch (BceServiceException e) {
48                System.out.println("Error ErrorCode: " + e.getErrorCode());
49                System.out.println("Error RequestId: " + e.getRequestId());
50                System.out.println("Error StatusCode: " + e.getStatusCode());
51                System.out.println("Error Message: " + e.getMessage());
52                System.out.println("Error ErrorType: " + e.getErrorType());
53            } catch (BceClientException e) {
54                System.out.println("Error Message: " + e.getMessage());
55            }
56        }
57    }).start();
58}}

示例二:使用Nextmarker完整示例。

Java
1import android.app.Activity;
2import android.os.Bundle;
3import com.baidubce.BceClientException;
4import com.baidubce.BceServiceException;
5import com.baidubce.auth.DefaultBceCredentials;
6import com.baidubce.demo.R;
7import com.baidubce.services.bos.BosClient;
8import com.baidubce.services.bos.BosClientConfiguration;
9import com.baidubce.services.bos.model.BosObjectSummary;
10import com.baidubce.services.bos.model.ListObjectsRequest;
11import com.baidubce.services.bos.model.ListObjectsResponse;
12
13public class ExampleActivity extends Activity {
14
15private String bucketName = <BucketName>;
16
17@Override
18protected void onCreate(Bundle savedInstanceState) {
19  super.onCreate(savedInstanceState);
20  setContentView(R.layout.activity_main);
21  new Thread(new Runnable() {
22      @Override
23      public void run() {
24         try {
25            BosClientConfiguration config = new BosClientConfiguration();
26            config.setCredentials(new DefaultBceCredentials(<AccessKeyId>, <SecretAccessKey>);
27            config.setEndpoint(<EndPoint>);
28            BosClient client = new BosClient(config);
29            ListObjectsRequest listObjectsRequest = new ListObjectsRequest(<BucketName>);
30            listObjectsRequest.setMarker("");
31            listObjectsRequest.setMaxKeys(20);
32            listObjectsRequest.setDelimiter(BceConfig.BOS_DELIMITER);
33            ListObjectsResponse listObjectsResponse = client.listObjects(listObjectsRequest);
34            String nextMark = "";
35            if(listObjectsResponse.isTruncated()){
36               nextMark = listObjectsResponse.getNextMarker();
37            }
38
39           ListObjectsRequest listObjectsRequest2 = new ListObjectsRequest(<BucketName>);
40           listObjectsRequest2.setMarker(nextMark);
41           listObjectsRequest2.setMaxKeys(20);
42           listObjectsRequest2.setDelimiter(BceConfig.BOS_DELIMITER);
43           ListObjectsResponse listing = client.listObjects(listObjectsRequest2);
44
45           for (BosObjectSummary objectSummary : listing.getContents()) {
46               System.out.println("ObjectKey: " + objectSummary.getKey());
47            }                
48
49          } catch (BceServiceException e) {
50            System.out.println("Error ErrorCode: " + e.getErrorCode());
51            System.out.println("Error RequestId: " + e.getRequestId());
52            System.out.println("Error StatusCode: " + e.getStatusCode());
53            System.out.println("Error Message: " + e.getMessage());
54            System.out.println("Error ErrorType: " + e.getErrorType());
55         } catch (BceClientException e) {
56            System.out.println("Error Message: " + e.getMessage());
57         }
58      }
59    }).start();
60}}

查询模拟文件夹

由于BOS本身是一个(<Key>,<Value>)的存储系统,所以原则上并不会存在“文件夹”的概念,但您可以通过 DelimiterPrefix 参数的配合进行文件夹功能模拟。

假设Bucket中有5个文件:bos.jpg,fun/,fun/test.jpg,fun/movie/001.avi,fun/movie/007.avi,可以把 “/” 符号作为分隔符模拟文件夹。

递归列出模拟文件夹下所有文件

可以通过设置 Prefix 参数来获取某个模拟文件夹下所有的文件:

Java
1// 构造ListObjectsRequest请求
2ListObjectsRequest listObjectsRequest = new ListObjectsRequest(<BucketName>);
3
4// 递归列出fun文件夹下的所有文件
5listObjectsRequest.setPrefix("fun/");
6
7ListObjectsResponse listing = client.listObjects(listObjectsRequest);
8
9// 遍历所有Object
10System.out.println("Objects:");
11for (BosObjectSummary objectSummary : listing.getContents()) {
12   System.out.println(objectSummary.getKey());
13}

输出:

Java
1Objects:
2fun/
3fun/movie/001.avi
4fun/movie/007.avi
5fun/test.jpg

查看模拟文件夹下的文件和子文件夹

PrefixDelimiter 结合的情况下,可以列出模拟文件夹下的文件和子文件夹:

Java
1// 构造ListObjectsRequest请求
2ListObjectsRequest listObjectsRequest = new ListObjectsRequest(<BucketName>);
3
4// 指定"/" 为模拟文件夹的分隔符
5listObjectsRequest.setDelimiter("/");
6
7// 列出fun文件夹下的所有文件和子文件夹
8listObjectsRequest.setPrefix("fun/");
9
10ListObjectsResponse listing = client.listObjects(listObjectsRequest);
11
12// 遍历所有Object
13System.out.println("Objects:");
14for (BosObjectSummary objectSummary : listing.getContents()) {
15   System.out.println(objectSummary.getKey());
16}
17
18// 遍历所有CommonPrefix
19System.out.println("\nCommonPrefixs:");
20for (String commonPrefix : listing.getCommonPrefixes()) {
21   System.out.println(commonPrefix);
22}

输出:

Java
1Objects:
2fun/
3fun/test.jpg
4
5CommonPrefixs:
6fun/movie/

说明:

返回的结果中, Objects 的列表中给出的是fun文件夹下的文件。而 CommonPrefixs 的列表中给出的是fun文件夹下的所有子文件夹。可以看出 fun/movie/001.avifun/movie/007.avi 两个文件并没有被列出来,因为它们属于 fun 文件夹下的 movie 子文件夹下的文件。

上一篇
上传Object
下一篇
获取Object