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

对象存储

复制全文
下载 pdf
桶清单
ListBucketInventory(Rust SDK)
复制全文
下载 pdf
ListBucketInventory(Rust SDK)
list_bucket_inventory 接口用于批量获取存储桶中的所有桶清单规则,本文介绍如何通过 Rust SDK 的 list_bucket_inventory 接口完成该操作。​
注意事项​
  • 您需要根据实际情况,填写示例代码中的地域和访问域名,详细介绍,请参见 地域和访问域名。​
  • 为了防止密钥泄露,本文示例代码需要从环境变量中读取 Access Key ID 和 Secret Access Key。因此使用 SDK 前,您需要配置长期访问凭证,详细介绍,请参见 配置长期访问凭证。​
  • 当 IsTruncated 为 true 时,需将 NextContinuationToken 作为下一次请求的 continuation-token 参数,否则无法获取剩余清单配置。​
  • continuation-token 仅在未完整列举时返回,缺失或错误值将导致从头开始列举。​
  • 返回的清单文件格式固定为 GZIP 压缩的 CSV,不支持其他格式。​
权限说明​
火山引擎主账号默认拥有全部权限,但是 IAM 用户默认没有任何权限。如果您需要使用子账号执行 list_bucket_inventory 操作,火山引擎主账号需通过 IAM策略和桶策略为该子账号授予以下权限:​
tos:ListBucketInventory​
代码示例​
列举存储桶的清单规则​
​
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::bucket::BucketAPI;​
use ve_tos_rust_sdk::asynchronous::tos;​
use ve_tos_rust_sdk::asynchronous::tos::AsyncRuntime;​
use ve_tos_rust_sdk::bucket::{ListBucketInventoryInput, ListBucketInventoryOutput};​
use ve_tos_rust_sdk::error::TosError;​
use ve_tos_rust_sdk::bucket::BucketInventoryConfiguration;​
​
#[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 input = ListBucketInventoryInput::new(bucket_name);​
let output = client.list_bucket_inventory(&input).await;​
​
match output {​
Ok(output) => {​
println!("Is truncated: {}", output.is_truncated());​
println!("Number of configurations: {}", output.configurations().len());​
​
for (index, config) in output.configurations().iter().enumerate() {​
println!("Configuration [{}]:", index);​
println!(" id: {}", config.id());​
println!(" is_enabled: {}", config.is_enabled());​
if let Some(filter) = config.filter() {​
println!(" filter prefix: {}", filter.prefix());​
}​
if let Some(dest) = config.destination() {​
if let Some(tos_dest) = dest.tos_bucket_destination() {​
println!(" destination bucket: {}", tos_dest.bucket());​
println!(" destination prefix: {}", tos_dest.prefix());​
}​
}​
if let Some(schedule) = config.schedule() {​
println!(" schedule frequency: {}", schedule.frequency().as_str());​
}​
println!(" included object versions: {}", config.included_object_versions().as_str());​
}​
​
if output.is_truncated() {​
println!("Next continuation token: {}", output.next_continuation_token());​
}​
}​
Err(err) => {​
match err {​
TosError::TosClientError { message, .. } => {​
println!("Client error: message: {}", message);​
}​
TosError::TosServerError { request_id, ec, code, .. } => {​
println!("Server error: request_id: {}, ec: {}, code: {}", request_id, ec, code);​
}​
_ => {​
println!("Unknown 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::bucket::BucketAPI;​
use ve_tos_rust_sdk::asynchronous::tos;​
use ve_tos_rust_sdk::asynchronous::tos::AsyncRuntime;​
use ve_tos_rust_sdk::bucket::{ListBucketInventoryInput, ListBucketInventoryOutput};​
use ve_tos_rust_sdk::error::TosError;​
use ve_tos_rust_sdk::bucket::BucketInventoryConfiguration;​
​
#[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 continuation_token = String::new();​
loop {​
let input = if continuation_token.is_empty() {​
ListBucketInventoryInput::new(bucket_name)​
} else {​
ListBucketInventoryInput::new_with_continuation_token(bucket_name, &continuation_token)​
};​
​
let output = client.list_bucket_inventory(&input).await;​
​
match output {​
Ok(output) => {​
println!("Is truncated: {}", output.is_truncated());​
println!("Number of configurations: {}", output.configurations().len());​
​
for (index, config) in output.configurations().iter().enumerate() {​
println!("Configuration [{}]:", index);​
println!(" id: {}", config.id());​
println!(" is_enabled: {}", config.is_enabled());​
if let Some(filter) = config.filter() {​
println!(" filter prefix: {}", filter.prefix());​
}​
if let Some(dest) = config.destination() {​
if let Some(tos_dest) = dest.tos_bucket_destination() {​
println!(" destination bucket: {}", tos_dest.bucket());​
println!(" destination prefix: {}", tos_dest.prefix());​
println!(" destination format: {}", tos_dest.format().as_str());​
println!(" destination role: {}", tos_dest.role());​
}​
}​
if let Some(schedule) = config.schedule() {​
println!(" schedule frequency: {}", schedule.frequency().as_str());​
}​
println!(" included object versions: {}", config.included_object_versions().as_str());​
if let Some(opt_fields) = config.optional_fields() {​
println!(" optional fields: {:?}", opt_fields.field());​
}​
println!(" is uncompressed: {}", config.is_un_compressed());​
}​
​
if output.is_truncated() {​
continuation_token = output.next_continuation_token().to_string();​
} else {​
break;​
}​
}​
Err(err) => {​
match err {​
TosError::TosClientError { message, .. } => {​
println!("Client error: message: {}", message);​
}​
TosError::TosServerError { request_id, ec, code, .. } => {​
println!("Server error: request_id: {}, ec: {}, code: {}", request_id, ec, code);​
}​
_ => {​
println!("Unknown error: {:?}", err);​
}​
}​
break;​
}​
}​
}​
}​
​
相关文档​
关于 ListBucketInventory 的 API 文档,请参见 ListBucketInventory。​
​
最近更新时间:2025.12.22 16:33:48
这个页面对您有帮助吗?
有用
有用
无用
无用