Harmony列举文件

更新时间:2025-03-10 10:31:43

本文介绍如何使用OSS Harmony SDK列举指定存储空间(Bucket)下的所有文件。

注意事项

示例代码

您可以通过以下示例代码,使用ListObjectsV2接口列举指定Bucket下的文件。

import Client, { RequestError } from '@aliyun/oss';

// 创建OSS客户端实例
const client = new Client({
  // 请替换为STS临时访问凭证的Access Key ID
  accessKeyId: 'yourAccessKeyId',
  // 请替换为STS临时访问凭证的Access Key Secret
  accessKeySecret: 'yourAccessKeySecret',
  // 请替换为STS临时访问凭证的Security Token
  securityToken: 'yourSecurityToken',
  // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou
  region: 'oss-cn-hangzhou',
});

/**
 * 列出Bucket中的对象。
 * 使用listObjectsV2方法列出指定Bucket中的对象及其元信息。
 */
const listObjectsV2 = async () => {
  try {
    // 调用listObjectsV2方法列出指定Bucket中的对象及其元信息
    const res = await client.listObjectsV2({
      bucket: 'yourBucketName', // Bucket名称,请替换为您实际使用的Bucket名称
    });

    // 打印列出的对象及其元信息
    console.log(JSON.stringify(res));
  } catch (err) {
    // 捕获请求过程中的异常信息
    if (err instanceof RequestError) {
      // 如果是已知类型的错误,则打印错误代码、错误消息、请求ID、状态码、EC码等信息
      console.log('code: ', err.code); // 错误代码
      console.log('message: ', err.message); // 错误消息
      console.log('requestId: ', err.requestId); // 请求ID
      console.log('status: ', err.status); // HTTP状态码
      console.log('ec: ', err.ec); // 错误码
    } else {
      // 打印其他未知类型的错误
      console.log('unknown error: ', err);
    }
  }
};

// 调用listObjectsV2函数执行列出Bucket中对象的操作
listObjectsV2();

常见使用场景

列举指定Prefix的文件

import Client, { RequestError } from '@aliyun/oss';

// 创建OSS客户端实例
const client = new Client({
  // 请替换为RAM用户的Access Key ID
  accessKeyId: 'yourAccessKeyId',
  // 请替换为RAM用户的Access Key Secret
  accessKeySecret: 'yourAccessKeySecret',
  // 填写Bucket所在的地域。例如,华东1(杭州)的Region为'oss-cn-hangzhou'
  region: 'oss-cn-hangzhou',
});


/**
 * 列出Bucket中以指定前缀开头的对象。
 * 使用listObjectsV2方法并指定prefix参数来过滤对象。
 */
const listObjectsV2WithPrefix = async () => {
  try {
    // 调用listObjectsV2方法列出指定Bucket中以指定前缀开头的对象
    const res = await client.listObjectsV2({
      bucket: 'yourBucketName', // Bucket名称,请替换为您实际使用的Bucket名称
      prefix: 'objectNamePrefix', // 对象名称前缀,请替换为您实际的前缀
    });

    // 打印列出的对象及其元信息
    console.log(JSON.stringify(res));
  } catch (err) {
    // 捕获请求过程中的异常信息
    if (err instanceof RequestError) {
      console.log('code: ', err.code); // 错误代码
      console.log('message: ', err.message); // 错误消息
      console.log('requestId: ', err.requestId); // 请求ID
      console.log('status: ', err.status); // HTTP状态码
      console.log('ec: ', err.ec); // 错误码
    } else {
      console.log('unknown error: ', err);
    }
  }
};

// 调用listObjectsV2WithPrefix函数执行列出以指定前缀开头的对象的操作
listObjectsV2WithPrefix();

列举指定Delimiter的文件

import Client, { RequestError } from '@aliyun/oss';

// 创建OSS客户端实例
const client = new Client({
  // 请替换为RAM用户的Access Key ID
  accessKeyId: 'yourAccessKeyId',
  // 请替换为RAM用户的Access Key Secret
  accessKeySecret: 'yourAccessKeySecret',
  // 填写Bucket所在的地域。例如,华东1(杭州)的Region为'oss-cn-hangzhou'
  region: 'oss-cn-hangzhou',
});


/**
 * 列出Bucket中的对象并使用分隔符。
 * 使用listObjectsV2方法并指定delimiter参数来模拟文件夹结构。
 */
const listObjectsV2WithDelimiter = async () => {
  try {
    // 调用listObjectsV2方法列出指定Bucket中的对象,并使用分隔符模拟文件夹结构
    const res = await client.listObjectsV2({
      bucket: 'yourBucketName', // Bucket名称,请替换为您实际使用的Bucket名称
      delimiter: '/', // 分隔符,通常用于模拟文件夹结构
    });

    // 打印列出的对象及其元信息
    console.log(JSON.stringify(res));
  } catch (err) {
    // 捕获请求过程中的异常信息
    if (err instanceof RequestError) {
      console.log('code: ', err.code); // 错误代码
      console.log('message: ', err.message); // 错误消息
      console.log('requestId: ', err.requestId); // 请求ID
      console.log('status: ', err.status); // HTTP状态码
      console.log('ec: ', err.ec); // 错误码
    } else {
      console.log('unknown error: ', err);
    }
  }
};

// 调用listObjectsV2WithDelimiter函数执行列出对象并使用分隔符的操作
listObjectsV2WithDelimiter();

分页列举所有文件

import Client, { RequestError } from '@aliyun/oss';

// 创建OSS客户端实例
const client = new Client({
  // 请替换为RAM用户的Access Key ID
  accessKeyId: 'yourAccessKeyId',
  // 请替换为RAM用户的Access Key Secret
  accessKeySecret: 'yourAccessKeySecret',
  // 填写Bucket所在的地域。例如,华东1(杭州)的Region为'oss-cn-hangzhou'
  region: 'oss-cn-hangzhou',
});


/**
 * 分页列出Bucket中的对象。
 * 使用listObjectsV2方法并结合continuationToken参数实现分页列出对象。
 */
const listObjectsV2WithContinuationToken = async () => {
  try {
    let continuationToken: string | undefined; // 分页标记,初始为空
    let isTruncated = true; // 是否还有更多对象需要列出

    // 循环列出对象,直到没有更多对象为止
    while (isTruncated) {
      const res = await client.listObjectsV2({
        bucket: 'yourBucketName', // Bucket名称,请替换为您实际使用的Bucket名称
        continuationToken, // 分页标记,用于获取下一页数据
      });

      // 打印当前页的对象及其元信息
      console.log(JSON.stringify(res));

      // 更新分页状态
      isTruncated = res.data.isTruncated; // 是否还有更多对象
      continuationToken = res.data.nextContinuationToken; // 下一页的分页标记
    }
  } catch (err) {
    // 捕获请求过程中的异常信息
    if (err instanceof RequestError) {
      console.log('code: ', err.code); // 错误代码
      console.log('message: ', err.message); // 错误消息
      console.log('requestId: ', err.requestId); // 请求ID
      console.log('status: ', err.status); // HTTP状态码
      console.log('ec: ', err.ec); // 错误码
    } else {
      console.log('unknown error: ', err);
    }
  }
};

// 调用listObjectsV2WithContinuationToken函数执行分页列出对象的操作
listObjectsV2WithContinuationToken();

列举文件并获取所有者信息

import Client, { RequestError } from '@aliyun/oss';

// 创建OSS客户端实例
const client = new Client({
  // 请替换为RAM用户的Access Key ID
  accessKeyId: 'yourAccessKeyId',
  // 请替换为RAM用户的Access Key Secret
  accessKeySecret: 'yourAccessKeySecret',
  // 填写Bucket所在的地域。例如,华东1(杭州)的Region为'oss-cn-hangzhou'
  region: 'oss-cn-hangzhou',
});

/**
 * 列出Bucket中的对象并获取对象的所有者信息。
 * 使用listObjectsV2方法并指定fetchOwner参数来获取对象的所有者信息。
 */
const listObjectsV2WithFetchOwner = async () => {
  try {
    // 调用listObjectsV2方法列出指定Bucket中的对象,并获取对象的所有者信息
    const res = await client.listObjectsV2({
      bucket: 'yourBucketName', // Bucket名称,请替换为您实际使用的Bucket名称
      fetchOwner: true, // 是否获取对象的所有者信息
    });

    // 打印列出的对象及其元信息
    console.log(JSON.stringify(res));
  } catch (err) {
    // 捕获请求过程中的异常信息
    if (err instanceof RequestError) {
      console.log('code: ', err.code); // 错误代码
      console.log('message: ', err.message); // 错误消息
      console.log('requestId: ', err.requestId); // 请求ID
      console.log('status: ', err.status); // HTTP状态码
      console.log('ec: ', err.ec); // 错误码
    } else {
      console.log('unknown error: ', err);
    }
  }
};

// 调用listObjectsV2WithFetchOwner函数执行列出对象并获取所有者信息的操作
listObjectsV2WithFetchOwner();
  • 本页导读 (1)
  • 注意事项
  • 示例代码
  • 常见使用场景
  • 列举指定Prefix的文件
  • 列举指定Delimiter的文件
  • 分页列举所有文件
  • 列举文件并获取所有者信息