查看Bucket中的Object
所有文档
menu

对象存储 BOS

查看Bucket中的Object

产品详情自助选购

查看Bucket中的Object

简单查询

查看Bucket中Object列表。

  • 基本流程

    1. 创建BosClient。
    2. 执行listObjects()方法。
  • 示例代码

    client.listObjects(<bucketName>)
      .then(function (response) {
          var contents = response.body.contents;
          for (var i = 0, l = contents.length; i < l; i++) {
              console.log(contents[i].key);
          }
      })
      .catch(function (error) {
          // 查询失败
      });

    注意:

    • 默认情况下,如果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值之后按字母排序开始返回。
-
  • 示例代码

    // 设置参数
    var options = {
        delimiter: '/',
        marker: '123'
    };
    
    client.listObjects(<bucketName>, options)
        .then(function (response) {
            var contents = response.body.contents;
            for (var i = 0, l = contents.length; i < l; i++) {
                console.log(contents[i].key);
            }
        })
        .catch(function (error) {
            // 查询失败
        });

查询模拟文件夹

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

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

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

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

// 设置参数
let options = {
prefix: 'fun/' // 递归列出fun目录下的所有文件
};


client.listObjects(<bucketName>, options)
.then(function (response) {
    console.log('Objects:');
    var contents = response.body.contents;
    for (var i = 0, l = contents.length; i < l; i++) {
        console.log(contents[i].key);
    }
})
.catch(function (error) {
    // 查询失败
});

输出:

Objects:
fun/
fun/movie/001.avi
fun/movie/007.avi
fun/test.jpg

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

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

// 设置参数
let options = {
    prefix: 'fun/', // 列出fun目录下的所有文件和文件夹
    delimiter: '/' // "/" 为文件夹的分隔符
};

client.listObjects(<bucketName>, options)
.then(function (response) {
    console.log('Objects:');
    var contents = response.body.contents;
    for (var i = 0, l = contents.length; i < l; i++) {
        console.log(contents[i].key);
    }
    console.log('CommonPrefixs:');
    var commonPrefixes = response.body.commonPrefixes;
    for (i = 0, l = commonPrefixes.length; i < l; i++) {
        console.log(commonPrefixes[i]);
    }
})
.catch(function (error) {
    // 查询失败
});

输出:

Objects:
fun/
fun/test.jpg

CommonPrefixs:
fun/movie/

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

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