You need to enable JavaScript to run this app.
文档中心
文档控制台
注册
对象存储

对象存储

复制全文
下载 pdf
列举对象 V2
列举对象 V2(Harmony SDK)
复制全文
下载 pdf
列举对象 V2(Harmony SDK)

本文介绍如何通过 listObjectsType2 列举指定桶下的所有对象、指定前缀文件、指定目录下的文件和子目录。

注意事项

  • ListObjects 接口已经修订为 ListObjectsType2,强烈建议开发者使用 ListObjectsType2。为保障向后兼容性,TOS 继续支持 ListObjects 接口。
  • 使用列举对象 V2,您必须具有 tos:ListBucket 权限,具体操作,请参见 IAM 策略概述

参数说明

ListObjectsType2 支持的参数如下:

参数

描述

Prefix

本次查询结果的前缀。

Delimiter

对对象名称进行分组的字符。

StartAfter

此次列举对象的起点。

ContinuationToken

指定列举操作需要从此 token 开始。可从上次列举结果中的 NextContinuationToken 中获取。

MaxKeys

返回列举对象的最大数,默认值为 1000。取值范围为 (0,1000]。

EncodingType

对返回的内容进行编码并指定编码的类型。取值说明如下:

  • undefined:默认值,无编码。
  • 'url':使用 URL 编码。

示例代码

简单列举

以下代码用于列举 bucketName 存储桶对象,最多列举 1000 个对象。

import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: "Provide your ak", 
  accessKeySecret: "Provide your sk", 
  securityToken: 'Provide your securityToken',
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,"Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

async function main() {
  try {
    // 获取 bucket 中最多 1000 个对象
    const res = await client.listObjectsType2({
      Bucket: bucketName,
      MaxKeys: 1000,
    });
    for (const obj of res.Contents) {
      // 对象 Key
      console.log('Object Key:', obj.Key);
      // 对象最后修改时间
      console.log('Object LastModified:', obj.LastModified);
      // 对象 Etag
      console.log('Object ETag:', obj.ETag);
      // 对象大小
      console.log('Object Size:', obj.Size);
      // 对象 Owner
      console.log('Object Owner:', obj.Owner);
      // 对象存储类型
      console.log('Object StorageClass:', obj.StorageClass);
      // 对象 CRC64
      console.log('Object HashCrc64ecma:', obj.HashCrc64ecma);
    }
  } catch (error) {
    handleError(error);
  }
}

main();

分页列举

以下代码用于分页列举 bucketName 存储桶中的前 1000 个和后 1000 个对象。

import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: "Provide your ak", 
  accessKeySecret: "Provide your sk", 
  securityToken: 'Provide your securityToken',
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,"Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error: Error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

async function main() {
  try {
    // 获取 bucket 中前 1000 个对象
    const res = await client.listObjectsType2({
      Bucket: bucketName,
      MaxKeys: 1000,
    });

    // 分页列举后 1000 个对象
    const res2 = await client.listObjectsType2({
      Bucket: bucketName,
      MaxKeys: 1000,
      ContinuationToken: res.NextContinuationToken,
    });
  } catch (error) {
    handleError(error);
  }
}

main();

列举指定前缀的所有对象

以下代码用于列举 bucketName 存储桶 prefix 前缀的对象。

import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: "Provide your ak", 
  accessKeySecret: "Provide your sk", 
  securityToken: 'Provide your securityToken',
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,"Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

async function main() {
  try {
    const prefix = '*** Provide your object key prefix ***';
    let continuationToken = '';
    while (true) {
      const res = await client.listObjectsType2({
        Bucket: bucketName,
        MaxKeys: 1000,
        ContinuationToken: continuationToken,
        Prefix: prefix,
      });
      
      if (!res.NextContinuationToken) {
        break;
      }
      
      continuationToken = res.NextContinuationToken;
    }
  } catch (error) {
    handleError(error);
  }
}
main();

分页列举桶内所有对象

以下代码用于分页列举 bucketName 存储桶中所有对象。

import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: "Provide your ak", 
  accessKeySecret: "Provide your sk", 
  securityToken: 'Provide your securityToken',
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,"Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

async function main() {
  try {
    let continuationToken = '';
    while (true) {
      const res = await client.listObjectsType2({
        Bucket: bucketName,
        MaxKeys: 1000,
        ContinuationToken: continuationToken,
      });
      
      if (!res.NextContinuationToken) {
        break;
      }
      
      continuationToken = res.NextContinuationToken;
    }
  } catch (error) {
    handleError(error);
  }
}
main();

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

TOS 只有对象的概念, 可通过创建一个大小为 0 并且以斜线 / 结尾的对象, 模拟目录的功能。
通过 delimiterprefix 两个参数可以模拟目录的功能:

  • 首先设置 delimiter/ 同时设置 prefix 为空, 可返回根目录下的对象和子目录信息。
  • 在设置 delimiter/ 同时设置 prefix 为子目录(subfiledir), 可返回子目录的对象和次级目录。

以下代码用于列举 bucketName 存储桶根目录下的对象和子目录。

import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: "Provide your ak", 
  accessKeySecret: "Provide your sk", 
  securityToken: 'Provide your securityToken',
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,"Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}
async function main() {
  try {
    // 列举目录下的文件和子目录
    let continuationToken = '';
    while (true) {
      const res = await client.listObjectsType2({
        Bucket: bucketName,
        MaxKeys: 1000,
        ContinuationToken: continuationToken,
        Delimiter: '/',
      });

      console.log('Sub Dir Length:', res.CommonPrefixes.length);
      for (const prefix of res.CommonPrefixes) {
        console.log('Sub Dir:', prefix.Prefix);
      }

      if (!res.NextContinuationToken) {
        break
      }
      continuationToken = res.NextContinuationToken;
    }
  } catch (error) {
    handleError(error);
  }
}
main();
最近更新时间:2024.12.23 17:29:49
这个页面对您有帮助吗?
有用
有用
无用
无用