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

对象存储

复制全文
下载 pdf
桶基础操作
HeadBucket(Rust SDK)
复制全文
下载 pdf
HeadBucket(Rust SDK)
head_bucket 接口用于判断桶是否存在及访问权限,本文介绍如何通过 Rust SDK 的 head_bucket 接口完成该操作。​
注意事项​
  • 您需要根据实际情况,填写示例代码中的地域和访问域名,详细介绍,请参见 地域和访问域名。​
  • 为了防止密钥泄露,本文示例代码需要从环境变量中读取 Access Key ID 和 Secret Access Key。因此使用 SDK 前,您需要配置长期访问凭证,详细介绍,请参见 配置长期访问凭证。​
  • 当桶不存在或权限不足时,接口返回 404 Not Found 或 403 Forbidden,不会返回响应消息头中的桶元数据。​
  • 若需获取桶的存储类型、可用区冗余类型等属性,必须确保请求身份已获授权且桶存在,否则无法读取对应响应头。​
权限说明​
火山引擎主账号默认拥有全部权限,但是 IAM 用户默认没有任何权限。如果您需要使用子账号执行 head_bucket 操作,火山引擎主账号需通过 IAM策略和桶策略为该子账号授予以下权限:​
tos:HeadBucket​
代码示例​
判断桶是否存在​
​
use async_trait::async_trait; ​
use std::env;​
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::HeadBucketInput;​
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: std::time::Duration) {​
tokio::time::sleep(duration).await;​
}​
​
fn spawn<'a, F>(&self, future: F) -> futures_core::future::BoxFuture<'a, Result<F::Output, Self::JoinError>>​
where​
F: std::future::Future + Send + 'static,​
F::Output: Send + 'static,​
{​
Box::pin(Handle::current().spawn(future))​
}​
​
fn block_on<F: std::future::Future>(&self, future: F) -> F::Output {​
Handle::current().block_on(future)​
}​
}​
​
#[tokio::main]​
async fn main() {​
init_tracing_log("info", "temp/logs", "app.log");​
​
let ak = env::var("TOS_ACCESS_KEY").unwrap_or_default();​
let sk = env::var("TOS_SECRET_KEY").unwrap_or_default();​
let endpoint = "https://tos-cn-beijing.volces.com";​
let region = "cn-beijing";​
let bucket_name = "example-bucket";​
​
let client = tos::builder::<TokioRuntime>()​
.ak(ak)​
.sk(sk)​
.region(region)​
.endpoint(endpoint)​
.build().unwrap();​
​
let input = HeadBucketInput::new(bucket_name);​
​
let result = client.head_bucket(&input).await;​
​
match result {​
Ok(output) => {​
println!("Bucket '{}' exists and is accessible.", bucket_name);​
println!("Bucket region: {}", output.region());​
println!("Default storage class: {}", output.storage_class().as_ref().map(|sc| sc.as_str()).unwrap_or("Unknown"));​
println!("AZ redundancy type: {}", output.az_redundancy().as_ref().map(|az| az.as_str()).unwrap_or("Unknown"));​
println!("Bucket type: {}", output.bucket_type().as_ref().map(|bt| bt.as_str()).unwrap_or("flat"));​
}​
Err(err) => {​
match err {​
TosError::TosServerError { status_code, .. } => {​
if status_code == 404 {​
println!("Bucket '{}' does not exist.", bucket_name);​
} else if status_code == 403 {​
println!("No access permission to bucket '{}'.", bucket_name);​
} else {​
println!("Server error: {:?}", err);​
}​
}​
_ => {​
println!("Client error: {:?}", err);​
}​
}​
}​
}​
}​
​
相关文档​
关于 HeadBucket 的 API 文档,请参见 HeadBucket。​
​
最近更新时间:2025.12.22 16:33:47
这个页面对您有帮助吗?
有用
有用
无用
无用