You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
桶基础操作
ListObjectsType2(Rust SDK)
复制全文
下载 pdf
ListObjectsType2(Rust SDK)
list_objects_type2 接口用于列举桶中的对象。​
注意事项​
  • 为了防止密钥泄露,本文示例代码需要从环境变量中读取 Access Key ID 和 Secret Access Key。因此使用 SDK 前,您需要配置长期访问凭证,详细介绍,请参见 配置长期访问凭证。​
  • 单次请求最多返回 1000 个对象,您可以使用 max-keys 参数设置返回对象的数量。​
权限说明​
火山引擎主账号默认拥有全部权限,但是 IAM 用户默认没有任何权限。如果您需要使用子账号执行 list_objects_type2 操作,火山引擎主账号需通过 IAM 策略概述和桶策略概述为该子账号授予以下权限:​
tos:ListBucket​
代码示例​
简单列举​
​
use async_trait::async_trait;​
use futures_core::future::BoxFuture;​
use std::env;​
use std::future::Future;​
use std::time::Duration;​
use tokio::runtime::Handle;​
use ve_tos_rust_sdk::common::init_tracing_log;​
use ve_tos_rust_sdk::asynchronous::object::ObjectAPI;​
use ve_tos_rust_sdk::asynchronous::tos;​
use ve_tos_rust_sdk::asynchronous::tos::AsyncRuntime;​
use ve_tos_rust_sdk::object::ListObjectsType2Input;​
use ve_tos_rust_sdk::error::TosError;​
​
#[derive(Debug, Default)]​
pub struct TokioRuntime {}​
​
#[async_trait]​
impl AsyncRuntime for TokioRuntime {​
type JoinError = tokio::task::JoinError;​
async fn sleep(&self, duration: Duration) {​
tokio::time::sleep(duration).await;​
}​
​
fn spawn<'a, F>(&self, future: F) -> BoxFuture<'a, Result<F::Output, Self::JoinError>>​
where​
F: Future + Send + 'static,​
F::Output: Send + 'static,​
{​
Box::pin(Handle::current().spawn(future))​
}​
​
fn block_on<F: Future>(&self, future: F) -> F::Output {​
Handle::current().block_on(future)​
}​
}​
​
#[tokio::main]​
async fn main() {​
let _guard = init_tracing_log("info", "temp/logs", "app.log");​
let ak = env::var("TOS_ACCESS_KEY").unwrap_or("".to_string());​
let sk = env::var("TOS_SECRET_KEY").unwrap_or("".to_string());​
let endpoint = "https://tos-cn-beijing.volces.com";​
let region = "cn-beijing";​
let client = tos::builder::<TokioRuntime>()​
.connection_timeout(3000)​
.request_timeout(10000)​
.max_retry_count(3)​
.ak(ak)​
.sk(sk)​
.region(region)​
.endpoint(endpoint)​
.build().unwrap();​
​
let bucket_name = "example-bucket";​
let mut input = ListObjectsType2Input::new(bucket_name);​
let output = client.list_objects_type2(&input).await;​
​
match output {​
Ok(output) => {​
println!("Request ID: {}", output.request_id());​
println!("Total objects: {}", output.key_count());​
output.contents().iter().enumerate().for_each(|(idx, obj)| {​
println!("Object {}:", idx + 1);​
println!(" Key: {}", obj.key());​
println!(" Size: {} bytes", obj.size());​
obj.last_modified().map(|lm| println!(" Last Modified: {}", lm));​
println!(" ETag: {}", obj.etag());​
});​
}​
Err(err) => {​
match err {​
TosError::TosClientError { message, .. } => println!("Client Error: {}", message),​
TosError::TosServerError { request_id, ec, code, .. } => println!("Server Error: RequestID={}, Code={}, Message={}", request_id, code, ec),​
_ => println!("Unexpected Error: {:?}", err)​
}​
}​
}​
}​
​
分页列举桶内对象​
​
use async_trait::async_trait;​
use futures_core::future::BoxFuture;​
use std::env;​
use std::future::Future;​
use std::time::Duration;​
use tokio::runtime::Handle;​
use ve_tos_rust_sdk::common::init_tracing_log;​
use ve_tos_rust_sdk::asynchronous::object::ObjectAPI;​
use ve_tos_rust_sdk::asynchronous::tos;​
use ve_tos_rust_sdk::asynchronous::tos::AsyncRuntime;​
use ve_tos_rust_sdk::object::ListObjectsType2Input;​
use ve_tos_rust_sdk::error::TosError;​
​
#[derive(Debug, Default)]​
pub struct TokioRuntime {}​
​
#[async_trait]​
impl AsyncRuntime for TokioRuntime {​
type JoinError = tokio::task::JoinError;​
async fn sleep(&self, duration: Duration) {​
tokio::time::sleep(duration).await;​
}​
​
fn spawn<'a, F>(&self, future: F) -> BoxFuture<'a, Result<F::Output, Self::JoinError>>​
where​
F: Future + Send + 'static,​
F::Output: Send + 'static,​
{​
Box::pin(Handle::current().spawn(future))​
}​
​
fn block_on<F: Future>(&self, future: F) -> F::Output {​
Handle::current().block_on(future)​
}​
}​
​
#[tokio::main]​
async fn main() {​
let _guard = init_tracing_log("info", "temp/logs", "app.log");​
let ak = env::var("TOS_ACCESS_KEY").unwrap_or("".to_string());​
let sk = env::var("TOS_SECRET_KEY").unwrap_or("".to_string());​
let endpoint = "https://tos-cn-beijing.volces.com";​
let region = "cn-beijing";​
let client = tos::builder::<TokioRuntime>()​
.connection_timeout(3000)​
.request_timeout(10000)​
.max_retry_count(3)​
.ak(ak)​
.sk(sk)​
.region(region)​
.endpoint(endpoint)​
.build().unwrap();​
​
let bucket_name = "example-bucket";​
let page_size = 10;​
let mut continuation_token: Option<String> = None;​
let mut page_number =1;​
​
loop {​
let mut input = ListObjectsType2Input::new(bucket_name);​
input.set_max_keys(page_size as isize);​
if let Some(token) = &continuation_token {​
input.set_continuation_token(token.clone());​
}​
​
let output = client.list_objects_type2(&input).await;​
match output {​
Ok(output) => {​
println!("Page {} - Request ID: {}", page_number, output.request_id());​
println!("Page {} - Objects count: {}", page_number, output.key_count());​
output.contents().iter().enumerate().for_each(|(idx, obj)| {​
println!("Page {} Object {}: {}", page_number, idx+1, obj.key());​
});​
​
if !output.is_truncated() {​
println!("Page {} - No more pages.", page_number);​
break;​
}​
​
continuation_token = Some(output.next_continuation_token().to_string());​
println!("Page {} - Next token: {}", page_number, continuation_token.as_ref().unwrap());​
page_number += 1;​
}​
Err(err) => {​
println!("Page {} - Error: {:?}", page_number, err);​
break;​
}​
}​
}​
}​
​
​
列举指定前缀的对象​
​
use async_trait::async_trait;​
use futures_core::future::BoxFuture;​
use std::env;​
use std::future::Future;​
use std::time::Duration;​
use tokio::runtime::Handle;​
use ve_tos_rust_sdk::common::init_tracing_log;​
use ve_tos_rust_sdk::asynchronous::object::ObjectAPI;​
use ve_tos_rust_sdk::asynchronous::tos;​
use ve_tos_rust_sdk::asynchronous::tos::AsyncRuntime;​
use ve_tos_rust_sdk::object::ListObjectsType2Input;​
use ve_tos_rust_sdk::error::TosError;​
​
#[derive(Debug, Default)]​
pub struct TokioRuntime {}​
​
#[async_trait]​
impl AsyncRuntime for TokioRuntime {​
type JoinError = tokio::task::JoinError;​
async fn sleep(&self, duration: Duration) {​
tokio::time::sleep(duration).await;​
}​
​
fn spawn<'a, F>(&self, future: F) -> BoxFuture<'a, Result<F::Output, Self::JoinError>>​
where​
F: Future + Send + 'static,​
F::Output: Send + 'static,​
{​
Box::pin(Handle::current().spawn(future))​
}​
​
fn block_on<F: Future>(&self, future: F) -> F::Output {​
Handle::current().block_on(future)​
}​
}​
​
#[tokio::main]​
async fn main() {​
let _guard = init_tracing_log("info", "temp/logs", "app.log");​
let ak = env::var("TOS_ACCESS_KEY").unwrap_or("".to_string());​
let sk = env::var("TOS_SECRET_KEY").unwrap_or("".to_string());​
let endpoint = "https://tos-cn-beijing.volces.com";​
let region = "cn-beijing";​
let client = tos::builder::<TokioRuntime>()​
.connection_timeout(3000)​
.request_timeout(10000)​
.max_retry_count(3)​
.ak(ak)​
.sk(sk)​
.region(region)​
.endpoint(endpoint)​
.build().unwrap();​
​
let bucket_name = "example-bucket";​
let mut input = ListObjectsType2Input::new(bucket_name);​
input.set_prefix("docs/");​
let output = client.list_objects_type2(&input).await;​
​
match output {​
Ok(output) => {​
println!("Request ID: {}", output.request_id());​
println!("Filtered objects count: {}", output.key_count());​
output.contents().iter().enumerate().for_each(|(idx, obj)| {​
println!("Filtered Object {}:", idx +1);​
println!(" Key: {}", obj.key());​
println!(" Size: {} bytes", obj.size());​
});​
}​
Err(err) => {​
match err {​
TosError::TosClientError { message, .. } => println!("Client Error: {}", message),​
TosError::TosServerError { request_id, ec, code, .. } => println!("Server Error: RequestID={}, Code={}, Message={}", request_id, code, ec),​
_ => println!("Unexpected Error: {:?}", err)​
}​
}​
}​
}​
​
​
相关文档​
关于 ListObjectsType2 的 API 文档,请参见 ListObjectsV2。​
​
最近更新时间:2025.12.22 16:33:47
这个页面对您有帮助吗?
有用
有用
无用
无用