查看Bucket中的Object
更新时间:2023-01-04
查看Bucket中的Object
简单查询
查看Bucket中Object列表。
-
基本流程
- 创建BosClient。
- 执行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>
)的存储系统,所以原则上并不会存在“文件夹”的概念,但您可以通过 delimiter
和 prefix
参数的配合进行文件夹功能模拟。
假设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
查看模拟文件夹下的文件和子文件夹
在 Prefix
和 Delimiter
结合的情况下,可以列出模拟文件夹下的文件和子文件夹:
// 设置参数
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.avi
,fun/movie/007.avi
两个文件并没有被列出来,因为它们属于fun
文件夹下的movie
子文件夹下的文件。