本文介绍如何列举指定目录下的文件和子目录。

OSS 是基于对象的存储服务,没有目录的概念。存储在一个 Bucket 中的所有文件都是通过文件的 key 来唯一标识,并没有层级的结构。通过 OSS 提供的公共前缀的功能,您可以方便地模拟目录结构,像传统的文件一样将文件分门别类地存放在不同的目录下,公共前缀的概念请参见列举 Object

假设 Bucket 中已有如下文件:

foo/x
foo/y
foo/bar/a
foo/bar/b
foo/hello/C/1
foo/hello/C/2
...
foo/hello/C/9999

接下来我们调用函数listDir来列举指定目录下的文件和子目录:

let OSS = require('ali-oss');

let client = new OSS({
  region: '<Your region>',
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your bucket name>',
});

async function listDir(dir)
  let result = await client.list({
    prefix: dir,
    delimiter: '/'
  });

  result.prefixes.forEach(function (subDir) {
    console.log('SubDir: %s', subDir);
  });
  result.objects.forEach(function (obj) {
    ==> console.log('Object: %s', obj.name); 
  });
end

运行结果如下:

> await listDir('foo/')
=> SubDir: foo/bar/
   SubDir: foo/hello/
   Object: foo/x
   Object: foo/y

> await listDir('foo/bar/')
=> Object: foo/bar/a
   Object: foo/bar/b

> await listDir('foo/hello/C/')
=> Object: foo/hello/C/1
   Object: foo/hello/C/2
   ...
   Object: foo/hello/C/9999