列举存储空间

存储空间(Bucket)按字母序排列。当存储空间数量庞大时,手动管理效率低且易出错。通过列举存储空间(ListBuckets)功能,可编程式地获取账号下全部或部分存储空间的列表,以实现自动化的资产盘点、批量操作和权限审计。

工作原理

列举存储空间的行为由请求参数和分页机制共同决定。

请求参数

通过在请求中设置以下参数,可以筛选和控制返回的结果。

参数名称

描述

prefix

前缀筛选:限制返回的存储空间名称必须以此字符串为前缀。

marker

分页标记:指定列表的起始位置。返回结果将从该标记之后按字母序排列的第一个开始。

max-keys

单页数量:限定单次请求返回的存储空间最大数量。取值范围为1-1000,默认值为 100。

分页机制

基础的列举操作默认仅返回一页数据。如果存储空间数量超过单页最大限制(由max-keys决定),必须采用分页机制才能获取完整列表。

分页的实现依赖于服务端在响应中返回的两个关键字段:

  • isTruncated (布尔值): 若为 true,表示还有后续数据页。

  • nextMarker (字符串): 下一页数据的起始标记。

分页的核心逻辑是:检查 isTruncated 标志。若为 true,则将返回的 nextMarker 作为下一次请求的 marker 参数,循环此过程,直至 isTruncated 返回 false。

部分SDK(如Python v2,Go v2,PHP v2,C# V2)提供了分页器(Paginator)来自动处理此循环,其他SDK则需要自行实现。

列举所有存储空间

最基础的列举操作。

控制台

  1. 登录OSS管理控制台

  2. 在左侧导航栏,单击Bucket 列表

    Bucket列表页面默认显示当前账号下的所有存储空间。如果您需要快速获取存储空间的个数以及存储空间的相关属性信息,请单击右上角的导出CSV图标download

ossutil

您可以使用命令行工具ossutil来列举存储空间,ossutil的安装请参见安装ossutil

以下命令用于列举请求者拥有的所有存储空间。

ossutil api list-buckets

关于该命令的更多信息,请参见list-buckets(get-service)

SDK

以下仅给出常见SDK的列举存储空间代码示例。关于其他SDK的列举存储空间代码示例,请参见SDK简介

Java

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.Bucket;

import java.util.List;

public class Demo {

    public static void main(String[] args) throws Exception {
        // 以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
        String region = "cn-hangzhou";
        
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

        // 创建OSSClient实例。
        // 当OSSClient实例不再使用时,调用shutdown方法以释放资源。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // 列举当前账号所有地域下的存储空间。
            List<Bucket> buckets = ossClient.listBuckets();
            for (Bucket bucket : buckets) {
                System.out.println(" - " + bucket.getName());
            }
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

import argparse
import alibabacloud_oss_v2 as oss

# 创建命令行参数解析器,并描述脚本用途:示例展示如何列出OSS中的所有存储空间
parser = argparse.ArgumentParser(description="list buckets sample")

# 添加命令行参数 --region,表示存储空间所在的区域,必需参数
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 添加命令行参数 --endpoint,表示其他服务可用来访问OSS的域名,非必需参数
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令行提供的参数,获取用户输入的值
    args = parser.parse_args()

    # 从环境变量中加载访问OSS所需的认证信息,用于身份验证
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK的默认配置创建配置对象,并设置认证提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # 如果提供了自定义endpoint,则更新配置对象中的endpoint属性
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用上述配置初始化OSS客户端,准备与OSS交互
    client = oss.Client(cfg)

    # 创建ListBuckets操作的分页器(Paginator),以便处理大量存储空间
    paginator = client.list_buckets_paginator()

    # 遍历分页结果
    for page in paginator.iter_page(oss.ListBucketsRequest()):
        # 对于每一页中的每一个存储空间,打印其名称、位置、创建日期
        for o in page.buckets:
            print(f'Bucket: {o.name}, Location: {o.location}, Created: {o.creation_date}')

# 当此脚本被直接执行时,调用main函数开始处理逻辑
if __name__ == "__main__":
    main()  # 脚本入口点,控制程序流程从这里开始

Go

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// 定义全局变量
var (
	region string // 存储区域
)

// init函数用于初始化命令行参数
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
}

func main() {
	// 解析命令行参数
	flag.Parse()

	// 检查region是否为空
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 加载默认配置并设置凭证提供者和区域
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 创建OSS客户端
	client := oss.NewClient(cfg)

	// 创建列出存储空间的请求
	request := &oss.ListBucketsRequest{}

	// 创建分页器
	p := client.NewListBucketsPaginator(request)

	var i int
	log.Println("Buckets:")

	// 遍历分页器中的每一页
	for p.HasNext() {
		i++

		// 获取下一页的数据
		page, err := p.NextPage(context.TODO())
		if err != nil {
			log.Fatalf("failed to get page %v, %v", i, err)
		}

		// 打印该页中的每个存储空间的信息
		for _, b := range page.Buckets {
			log.Printf("Bucket: %v, StorageClass: %v, Location: %v\n", oss.ToString(b.Name), oss.ToString(b.StorageClass), oss.ToString(b.Location))
		}
	}

}

PHP

<?php

require_once __DIR__ . '/../vendor/autoload.php'; // 引入自动加载文件,加载依赖库

use AlibabaCloud\Oss\V2 as Oss;

// 定义命令行参数描述
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 区域是必填项,存储空间所在的区域,例如 oss-cn-hangzhou。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 终端节点是可选项,其他服务可以用来访问OSS的域名。
];
$longopts = \array_map(function ($key) {
    return "$key:"; 
}, array_keys($optsdesc));

// 解析命令行参数
$options = getopt("", $longopts); 

// 检查必填参数是否缺失
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 提示缺少必填参数
        exit(1); 
    }
}

// 获取命令行参数值
$region = $options["region"]; // 存储空间所在区域。

// 使用环境变量加载凭证信息(AccessKeyId 和 AccessKeySecret)
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); // 从环境变量中加载凭证信息。

// 使用SDK的默认配置
$cfg = Oss\Config::loadDefault(); // 加载SDK的默认配置。
$cfg->setCredentialsProvider($credentialsProvider); // 设置凭证提供者。
$cfg->setRegion($region); // 设置区域。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // 如果提供了终端节点,则设置终端节点。
}

// 创建OSS客户端实例
$client = new Oss\Client($cfg); // 创建OSS客户端实例。

// 创建用于ListBuckets操作的分页器
$paginator = new Oss\Paginator\ListBucketsPaginator($client); // 创建分页器,用于列出存储空间。
$iter = $paginator->iterPage(new Oss\Models\ListBucketsRequest()); // 获取分页迭代器。


// 遍历存储空间分页结果

foreach ($iter as $page) { // 遍历每一页的存储空间列表。
    foreach ($page->buckets ?? [] as $bucket) { // 遍历当前页中的每个存储空间。
        print ("Bucket: $bucket->name, $bucket->location\n"); // 打印存储空间名称和所在区域。
    }
}

C#

using OSS = AlibabaCloud.OSS.V2; // 为阿里云OSS SDK创建别名,简化后续使用

var region = "cn-hangzhou"; // 必须项,设置Bucket所在的区域(Region)。以华东1(杭州)为例,Region填写为cn-hangzhou
var endpoint = null as string;  // 可选项,指定访问OSS服务的域名。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com

// 加载OSS SDK的默认配置,此配置会自动从环境变量中读取凭证信息(如AccessKey)
var cfg = OSS.Configuration.LoadDefault();
// 显式设置使用环境变量获取凭证,用于身份验证(格式:OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET)
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// 设置配置的Bucket区域
cfg.Region = region;
// 若已指定了endpoint,则覆盖默认的endpoint
if(endpoint != null)
{
    cfg.Endpoint = endpoint;
}

// 使用配置信息创建OSS客户端实例
using var client = new OSS.Client(cfg);

// 创建ListBuckets操作的分页器(Paginator),用于处理分页结果
// ListBucketsRequest是SDK定义的请求模型,此处使用默认构造函数(获取所有Bucket) 
var paginator = client.ListBucketsPaginator(new OSS.Models.ListBucketsRequest());

Console.WriteLine("Buckets:");
await foreach (var page in paginator.IterPageAsync())
{
// 遍历当前页中的每个Bucket
    foreach (var bucket in page.Buckets ?? [])
    {
    // 打印存储桶信息:名称、存储类型、所在区域
    Console.WriteLine($"Bucket:{bucket.Name}, {bucket.StorageClass}, {bucket.Location}");
    }
}

Node.js

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

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourregion',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // yourBucketName填写Bucket名称。
  bucket: 'yourBucketName',
});

async function listBuckets() {
  try {
    // 列举当前账号所有地域下的存储空间。
    const result = await client.listBuckets();
    console.log(result);
  } catch (err) {
    console.log(err);
  }
}

listBuckets();

Harmony

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
const listBuckets = async () => {
  try {
    // 调用listBuckets方法列出所有的bucket
    const res = await client.listBuckets({});

    // 打印返回结果
    console.log(JSON.stringify(res));
  } catch (err) {
    // 捕获并处理请求错误
    if (err instanceof RequestError) {
      console.log('错误码: ', err.code); // 错误代码
      console.log('错误信息: ', err.message); // 错误描述
      console.log('请求ID: ', err.requestId); // 请求的唯一标识
      console.log('HTTP状态码: ', err.status); // HTTP响应状态码
      console.log('错误类别: ', err.ec); // 错误类别
    } else {
      console.log('未知错误: ', err); // 非RequestError类型的错误
    }
  }
};

// 调用函数,列出所有bucket
listBuckets();

Swift

import AlibabaCloudOSS
import Foundation

@main
struct Main {
    static func main() async {
        do {
            // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
            let region = "cn-hangzhou"
            // 可选项,指定访问OSS服务的域名。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com
            let endpoint: String? = nil

            // 从环境变量加载凭证(需提前设置 OSS_ACCESS_KEY_ID 和 OSS_ACCESS_KEY_SECRET)
            let credentialsProvider = EnvironmentCredentialsProvider()

            // 配置OSS客户端参数
            let config = Configuration.default()
                .withRegion(region) // 设置区域
                .withCredentialsProvider(credentialsProvider) // 设置凭证
                
            // 设置Endpoint
            if let endpoint = endpoint {
                config.withEndpoint(endpoint)
            }

            // 创建OSS客户端实例
            let client = Client(config)

            // 创建分页遍历存储空间(Bucket)的Paginator
            let paginator = client.listBucketsPaginator(ListBucketsRequest())

            // 遍历所有存储空间并输出信息
            for try await page in paginator {
                for bucket in page.buckets ?? [] {
                    print("Bucket名称: \(bucket.name ?? ""), 存储类型: \(bucket.storageClass ?? ""), 所属地域: \(bucket.location ?? "")")
                }
            }

        } catch {
            // 捕获并处理异常
            print("error:\n\(error)")
        }
    }
}

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# 列举当前账号所有地域下的存储空间。
buckets = client.list_buckets
buckets.each { |b| puts b.name }

Android

完整示例代码请参见列举存储空间

// 列举当前账号所有地域下的存储空间。
ListBucketsRequest request = new ListBucketsRequest();
ossClient.asyncListBuckets(request, new OSSCompletedCallback<ListBucketsRequest, ListBucketsResult>() {
    @Override
    public void onSuccess(ListBucketsRequest request, ListBucketsResult result) {
        List<OSSBucketSummary> buckets = result.getBuckets();
        for (int i = 0; i < buckets.size(); i++) {
            Log.i("info", "name: " + buckets.get(i).name + " "
                    + "location: " + buckets.get(i).location);
        }
    }

    @Override
    public void onFailure(ListBucketsRequest request, ClientException clientException, ServiceException serviceException) {
        // 请求异常。
        if (clientException != null) {
            // 客户端异常,例如网络异常等。
            clientException.printStackTrace();
        }
        if (serviceException != null) {
            // 服务端异常。
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});

C++

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /*初始化OSS账号信息。*/
    
    /*yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "yourEndpoint";
    
    / *yourRegion填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn - hangzhou。 * /
    std::string Region = "yourRegion";

    /*初始化网络等资源。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /*列举当前账号下的所有存储空间。*/
    ListBucketsRequest request;
    auto outcome = client.ListBuckets(request);

    if (outcome.isSuccess()) {
        /*打印存储空间信息。*/
        std::cout <<" success, and bucket count is" << outcome.result().Buckets().size() << std::endl;
        std::cout << "Bucket name is" << std::endl;
        for (auto result : outcome.result().Buckets())
        {
            std::cout << result.Name() << std::endl;
        }
    }
    else {
        /*异常处理。*/
        std::cout << "ListBuckets fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /*释放网络等资源。*/
    ShutdownSdk();
    return 0;
}

iOS

OSSGetServiceRequest * getService = [OSSGetServiceRequest new];
// 列举当前账号所有地域下的存储空间。    
OSSTask * getServiceTask = [client getService:getService];
[getServiceTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        OSSGetServiceResult * result = task.result;
        NSLog(@"buckets: %@", result.buckets);
        NSLog(@"owner: %@, %@", result.ownerId, result.ownerDispName);
        [result.buckets enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            NSDictionary * bucketInfo = obj;
            NSLog(@"BucketName: %@", [bucketInfo objectForKey:@"Name"]);
            NSLog(@"CreationDate: %@", [bucketInfo objectForKey:@"CreationDate"]);
            NSLog(@"Location: %@", [bucketInfo objectForKey:@"Location"]);
        }];
    } else {
        NSLog(@"get service failed, error: %@", task.error);
    }
    return nil;
}];
// 实现同步阻塞等待任务完成。
// [getServiceTask waitUntilFinished];

C

#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
const char *endpoint = "yourEndpoint";
/* yourRegion填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。*/
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* 用char*类型的字符串初始化aos_string_t类型。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    //需要额外配置以下两个参数
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* 是否使用CNAME域名访问OSS服务。0表示不使用。*/
    options->config->is_cname = 0;
    /* 设置网络相关参数,比如超时时间等*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* 用于内存管理的内存池(pool),等价于apr_pool_t。其实现代码在apr库中。*/
    aos_pool_t *pool;
    /* 重新创建一个内存池,第二个参数是NULL,表示没有继承其它内存池。*/
    aos_pool_create(&pool, NULL);
    /* 创建并初始化options,该参数包括endpoint、access_key_id、acces_key_secret、is_cname、curl等全局配置信息。*/
    oss_request_options_t *oss_client_options;
    /* 在内存池中分配内存给options。*/
    oss_client_options = oss_request_options_create(pool);
    /* 初始化Client的选项oss_client_options。*/
    init_options(oss_client_options);
    /* 初始化参数。*/
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    oss_list_buckets_params_t *params = NULL;
    oss_list_bucket_content_t *content = NULL;
    int size = 0;
    params = oss_create_list_buckets_params(pool);
    /* 列举存储空间。*/
    resp_status = oss_list_bucket(oss_client_options, params, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("list buckets succeeded\n");
    } else {
        printf("list buckets failed\n");
    }
    /* 打印存储空间。*/
    aos_list_for_each_entry(oss_list_bucket_content_t, content, &params->bucket_list, node) {
        printf("BucketName: %s\n", content->name.data);
        ++size;
    }
    /* 释放内存池,相当于释放了请求过程中各资源分配的内存。*/
    aos_pool_destroy(pool);
    /* 释放之前分配的全局资源。*/
    aos_http_io_deinitialize();
    return 0;
}

ossbrowser

登录ossbrowser 2.0后,单击页面左侧全部按钮显示当前账号下的所有存储空间。有关ossbrowser 2.0的安装与登录,请参见安装ossbrowser 2.0登录ossbrowser 2.0

image

API

以上操作方式底层基于API实现,如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见ListBuckets(GetService)

列举指定前缀的存储空间

通过设置prefix参数进行服务端筛选,仅返回名称匹配指定前缀的存储空间。

ossutil

列举请求者拥有的以example为前缀的所有存储空间。

ossutil api list-buckets --prefix example

更多用法请参见list-buckets(get-service)

SDK

Java

完整示例代码见列举存储空间(Java SDK)

// 1. 创建请求对象
ListBucketsRequest listBucketsRequest = new ListBucketsRequest();

// 2. 设置前缀参数
listBucketsRequest.setPrefix("example");

// 3. 执行请求
BucketList bucketList = ossClient.listBuckets(listBucketsRequest);

Python

完整示例代码请参见列举存储空间(Python SDK V2)

# 在分页器的 iter_page 方法中传入带 prefix 参数的请求对象
for page in paginator.iter_page(oss.ListBucketsRequest(
    prefix='example'
)):
    # ... 循环处理 ...

Go

完整示例代码请参见列举存储空间(Go SDK V2)

// 1. 创建请求对象,并设置 Prefix 字段
request := &oss.ListBucketsRequest{
    Prefix: oss.Ptr("example"), 
}

// 2. 使用该请求对象创建分页器
p := client.NewListBucketsPaginator(request)

Node.js

完整示例代码请参见列举存储空间(Node.js SDK)

// 在 listBuckets 方法的参数对象中指定 prefix
const result = await client.listBuckets({
  prefix: 'example' 
});

Harmony

完整示例代码请参见列举存储空间

// 关键代码:在调用 listBuckets 时传入一个含 prefix 的对象
const res = await client.listBuckets({
  prefix: 'bucketNamePrefix'
});

Ruby

完整示例代码请参见列举存储空间

# 关键代码:以 :prefix 作为参数调用 list_buckets
buckets = client.list_buckets(:prefix => 'example')

列举指定位置后的存储空间

通过设置marker参数指定列表的起始位置,是实现手动分页的核心步骤。

ossutil

列举请求者拥有的从examplebucket之后的所有存储空间。

ossutil api list-buckets --marker examplebucket

更多用法请参见list-buckets(get-service)

SDK

Java

完整示例代码见列举存储空间(Java SDK)

// 1. marker设置为"examplebucket",列出"examplebucket"之后的bucket。
String nextMarker = "examplebucket"; 
BucketList bucketListing;

do {
    // 2. 使用当前 marker 发起请求。
    bucketListing = ossClient.listBuckets(new ListBucketsRequest()
            .withMarker(nextMarker)
            .withMaxKeys(200));

    // 3. 更新 marker 以便获取下一页。
    nextMarker = bucketListing.getNextMarker(); 
} while (bucketListing.isTruncated());

Python

完整示例代码请参见列举存储空间(Python SDK V2)

# marker设置为"example-bucket",列出"example-bucket"之后的bucket。
for page in paginator.iter_page(oss.ListBucketsRequest(
    marker="example-bucket"
)):
    # ... 遍历 page ...

Go

完整示例代码请参见列举存储空间(Go SDK V2)

// marker设置为"example-bucket",列出"example-bucket"之后的bucket。
request := &oss.ListBucketsRequest{
    Marker: oss.Ptr("example-bucket"), 
}

// 使用该请求创建分页器
p := client.NewListBucketsPaginator(request)

Harmony

完整示例代码请参见列举存储空间

// marker的初始值设置为"examplebucket",指定列举的起始点。
let marker: string | undefined = "examplebucket"; 
let isTruncated = true;

while (isTruncated) {
  // 在请求中使用当前的 marker
  const res = await client.listBuckets({
    marker 
  });
  // ...
  // 更新 marker 以便下一次循环
  marker = res.data.nextMarker; 
  isTruncated = res.data.isTruncated;
}

Node.js

完整示例代码请参见列举存储空间(Node.js SDK)

// marker设置为'examplebucket',列出'examplebucket'之后的bucket。
const result = await client.listBuckets({
  marker: 'examplebucket' 
});

Android

完整示例代码请参见列举存储空间

ListBucketsRequest request = new ListBucketsRequest();
// marker设置为"examplebucket",列出"examplebucket"之后的bucket。
request.setMarker("examplebucket");

ossClient.asyncListBuckets(request, ...);```

#### **iOS (Objective-C)**
```objectivec
OSSGetServiceRequest * getService = [OSSGetServiceRequest new];
// marker设置为"examplebucket",列出"examplebucket"之后的bucket。
getService.marker = @"examplebucket";

OSSTask * getServiceTask = [client getService:getService];

iOS

完整示例代码请参见列举存储空间

OSSGetServiceRequest * getService = [OSSGetServiceRequest new];

// marker设置为"examplebucket",列出"examplebucket"之后的bucket。
getService.marker = @"examplebucket";

// 使用该请求对象发起异步任务
OSSTask * getServiceTask = [client getService:getService];

列举指定资源组内的存储空间

根据指定的资源组ID精确查找Bucket。

ossutil

列举请求者指定资源组IDrg-123的所有存储空间。

ossutil api list-buckets --resource-group-id rg-123

更多用法请参见list-buckets(get-service)

SDK

Java

完整示例代码见列举存储空间(Java SDK)

ListBucketsRequest listBucketsRequest = new ListBucketsRequest();

// 关键代码:设置要筛选的资源组ID。
listBucketsRequest.setResourceGroupId("rg-aek27tc****");

// 将配置好的请求对象传入 listBuckets 方法
BucketList bucketList = ossClient.listBuckets(listBucketsRequest);

Python

完整示例代码请参见列举存储空间(Python SDK V2)

# 关键代码:在 iter_page 方法中构造请求并指定 resource_group_id。
for page in paginator.iter_page(oss.ListBucketsRequest(
    resource_group_id="rg-aek27tc********"
)):
    # ... 遍历 page ...

Go

完整示例代码请参见列举存储空间(Go SDK V2)

// 关键代码:创建请求并设置 ResourceGroupId 字段。
request := &oss.ListBucketsRequest{
    ResourceGroupId: oss.Ptr("rg-aek27tc********"), 
}

// 使用该请求创建分页器
p := client.NewListBucketsPaginator(request)

PHP

完整示例代码参见列举存储空间(PHP SDK V2)

// 关键代码:在 iterPage 方法中构造请求并指定 resourceGroupId。
$iter = $paginator->iterPage(new Oss\Models\ListBucketsRequest(
    resourceGroupId: "rg-aekzfalvmw2sxby"
));

控制单次返回数量

通过设置max-keys参数,控制单次请求返回的Bucket数量,即定义分页大小。

ossutil

限定本次调用最多返回100个存储空间。

ossutil api list-buckets --max-keys 100

更多用法请参见list-buckets(get-service)

SDK

Java

完整示例代码见列举存储空间(Java SDK)

ListBucketsRequest listBucketsRequest = new ListBucketsRequest();

// 关键代码:设置maxKeys参数为500,限定本次最多返回500个Bucket。
listBucketsRequest.setMaxKeys(500);

// 将配置好的请求对象传入方法
BucketList bucketList = ossClient.listBuckets(listBucketsRequest);

Python

完整示例代码请参见列举存储空间(Python SDK V2)

# 关键代码:在创建ListBucketsRequest时,传入max_keys参数为10。
# 这会使得分页器每次请求最多获取10个Bucket。
for page in paginator.iter_page(oss.ListBucketsRequest(
    max_keys=10
)):
    # ... 遍历 page ...

Go

完整示例代码请参见列举存储空间(Go SDK V2)

// 关键代码:在创建ListBucketsRequest时,设置MaxKeys字段为5。
// 分页器将使用此设置,每次请求最多获取5个Bucket。
request := &oss.ListBucketsRequest{
    MaxKeys: 5,
}

p := client.NewListBucketsPaginator(request)

Node.js

完整示例代码请参见列举存储空间(Node.js SDK)

// 关键代码:在调用listBuckets时,传入一个包含'max-keys'属性的对象。
// 'max-keys'被设置为500,限定本次最多返回500个Bucket。
const result = await client.listBuckets({
  'max-keys': 500
});

Android

完整示例代码请参见列举存储空间

ListBucketsRequest request = new ListBucketsRequest();

// 关键代码:设置maxKeys参数为500,限定本次异步请求最多返回500个Bucket。
request.setMaxKeys(500);

ossClient.asyncListBuckets(request, ...);

iOS

完整示例代码请参见列举存储空间

OSSGetServiceRequest * getService = [OSSGetServiceRequest new];

// 关键更代码:设置getService请求对象的maxKeys属性为500。
getService.maxKeys = 500;

OSSTask * getServiceTask = [client getService:getService];

使用限制

不支持使用传输加速 Endpoint 列举 Bucket。因为传输加速服务仅解析携带Bucket名称的三级域名(例如 https://BucketName.oss-accelerate.aliyuncs.com),而列举Bucket 的请求域名中不携带Bucket名称(格式为 https://oss-cn-hangzhou.aliyuncs.com)。