您可以列举指定存储空间下的所有文件或者指定目录下的文件和子目录。

列举指定存储空间下的所有文件

通过list接口列举当前 Bucket 下的所有文件。主要参数说明如下:

  • prefix:只列出符合特定前缀的文件。
  • marker:只列出文件名大于 marker 之后的文件。
  • delimiter:用于获取文件的公共前缀。
  • max-keys:用于指定最多返回的文件个数。

以下代码用于列举指定存储空间下的所有文件:

const OSS = require('ali-oss');
const client = new OSS({
  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your bucket name>'
});
async function list() {
  try {
    // 不带任何参数,默认最多返回1000个文件。
    let result = await client.list();
    console.log(result);
    // 根据nextMarker继续列出文件。
    if (result.isTruncated) {
      result = await client.list({
        marker: result.nextMarker
      });
    }
    // 列举前缀为'my-'的文件。
    result = await client.list({
      prefix: 'my-'
    });
    console.log(result);
    // 列举前缀为'my-'且在'my-object'之后的文件。
    result = await client.list({
      prefix: 'my-',
      marker: 'my-object'
    });
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}
list();

列举指定目录下的文件和子目录

OSS没有文件夹(目录)的概念,所有元素都是以文件来存储。创建文件夹本质上来说是创建了一个大小为0并以正斜线(/)结尾的文件。这个文件可以被上传和下载,控制台会对以正斜线(/)结尾的文件以文件夹的方式展示。

假设 Bucket 中已有如下文件:

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

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

const OSS = require('ali-oss');
const client = new OSS({
  // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your bucket name>'
});

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

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

listDir('foo/');
// SubDir: foo/bar/
// SubDir: foo/hello/
// Object: foo/x
// Object: foo/y

listDir('foo/bar/');
// Object: foo/bar/a
// Object: foo/bar/b

listDir('foo/hello/C/');
// Object: foo/hello/C/1
// Object: foo/hello/C/2
// ...
// Object: foo/hello/C/9999