本文介绍如何列举文件。

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

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

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

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

let OSS = require('ali-oss');
let client = new OSS({
  region: '<Your region>',
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your bucket name>',
});
async function list () {
  {
    // 不带任何参数,默认最多返回1000个文件。
    let result = await client.list();
    console.log(result);
    // 根据nextMarker继续列出文件。
    if (result.isTruncated) {
      let result = await client.list({
        marker: result.nextMarker
      });
    }
  // 列举前缀为'my-'的文件。
  let result = await client.list({
     prefix: 'my-'
  });
  console.log(result);
  // 列举前缀为'my-'且在'my-object'之后的文件。
  let 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来列举指定目录下的文件和子目录:

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