查看Bucket中的Object
更新时间:2023-01-04
查看Bucket中的Object
简单查询
查看Bucket中Object列表。
-
基本流程
- 创建BosClient。
- 执行listObjects()方法。
-
示例代码
JavaScript1client.listObjects(<bucketName>) 2 .then(function (response) { 3 var contents = response.body.contents; 4 for (var i = 0, l = contents.length; i < l; i++) { 5 console.log(contents[i].key); 6 } 7 }) 8 .catch(function (error) { 9 // 查询失败 10 });
注意:
- 默认情况下,如果Bucket中的Object数量大于1000,则只会返回1000个Object,并且返回结果中IsTruncated值为True,并返回NextMarker做为下次读取的起点。
- 若想获取更多的Object,可以使用Marker参数分次读取,请参考扩展查询。
扩展查询
用户可以通过设置listObjects参数来完成更多扩展查询操作设置。可以设置的扩展参数如下:
参数名称 | 说明 | 默认值 |
---|---|---|
maxKeys | 设定此次返回Object的最大个数,不可超过1000。 | 1000 |
prefix | 设定objectKey的前缀,前缀是指objectKey包含并以prefix的值作为开始。 通常与delimiter配合在查询模拟文件夹中使用。 |
- |
delimiter | 是一个分隔符,用来对objectKey进行分层。 通常与prefix配合在查询模拟文件夹中使用。 从prefix开始到第一次出现delimiter字符之间的objectKey称为:commonPrefixes。 |
- |
marker | 是一个字符串,用来设定返回结果的起始位置。 设定marker值之后,返回的Object会从marker值之后按字母排序开始返回。 |
- |
-
示例代码
JavaScript1// 设置参数 2var options = { 3 delimiter: '/', 4 marker: '123' 5}; 6 7client.listObjects(<bucketName>, options) 8 .then(function (response) { 9 var contents = response.body.contents; 10 for (var i = 0, l = contents.length; i < l; i++) { 11 console.log(contents[i].key); 12 } 13 }) 14 .catch(function (error) { 15 // 查询失败 16 });
查询模拟文件夹
由于BOS本身是一个(<Key>,<Value>
)的存储系统,所以原则上并不会存在“文件夹”的概念,但您可以通过 delimiter
和 prefix
参数的配合进行文件夹功能模拟。
假设Bucket中有5个文件:bos.jpg,fun/,fun/test.jpg,fun/movie/001.avi,fun/movie/007.avi,可以把 “/” 符号作为分隔符模拟文件夹。
递归列出模拟文件夹下所有文件
可以通过设置 Prefix
参数来获取某个模拟文件夹下所有的文件:
JavaScript
1// 设置参数
2let options = {
3prefix: 'fun/' // 递归列出fun目录下的所有文件
4};
5
6
7client.listObjects(<bucketName>, options)
8.then(function (response) {
9 console.log('Objects:');
10 var contents = response.body.contents;
11 for (var i = 0, l = contents.length; i < l; i++) {
12 console.log(contents[i].key);
13 }
14})
15.catch(function (error) {
16 // 查询失败
17});
输出:
JavaScript
1Objects:
2fun/
3fun/movie/001.avi
4fun/movie/007.avi
5fun/test.jpg
查看模拟文件夹下的文件和子文件夹
在 Prefix
和 Delimiter
结合的情况下,可以列出模拟文件夹下的文件和子文件夹:
JavaScript
1// 设置参数
2let options = {
3 prefix: 'fun/', // 列出fun目录下的所有文件和文件夹
4 delimiter: '/' // "/" 为文件夹的分隔符
5};
6
7client.listObjects(<bucketName>, options)
8.then(function (response) {
9 console.log('Objects:');
10 var contents = response.body.contents;
11 for (var i = 0, l = contents.length; i < l; i++) {
12 console.log(contents[i].key);
13 }
14 console.log('CommonPrefixs:');
15 var commonPrefixes = response.body.commonPrefixes;
16 for (i = 0, l = commonPrefixes.length; i < l; i++) {
17 console.log(commonPrefixes[i]);
18 }
19})
20.catch(function (error) {
21 // 查询失败
22});
输出:
JavaScript
1Objects:
2fun/
3fun/test.jpg
4
5CommonPrefixs:
6fun/movie/
说明: 返回的结果中,
Objects
的列表中给出的是fun文件夹下的文件。而CommonPrefixs
的列表中给出的是fun文件夹下的所有子文件夹。可以看出fun/movie/001.avi
,fun/movie/007.avi
两个文件并没有被列出来,因为它们属于fun
文件夹下的movie
子文件夹下的文件。