Rust 快速入门指南

使用 MinIO Rust SDK 从 Rust 应用连接 SILO。

MinIO Rust SDK

SILO 实现兼容 S3 的服务端契约,因此 Rust 应用可以直接使用上游 MinIO Rust SDK。该 crate 提供异步、强类型的请求构建器 API。

安装软件包

Cargo.toml 中加入 SDK 与 Tokio 运行时:

[dependencies]
minio = "0.4.0"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }

配置连接

export S3_ENDPOINT=http://127.0.0.1:9000
export S3_ACCESS_KEY=silo-admin
export S3_SECRET_KEY=replace-with-a-strong-secret

S3_ENDPOINT 是包含 http://https:// 协议的完整 URL。请把凭据保存在源码仓库之外。

创建存储桶并上传对象

use minio::s3::builders::ObjectContent;
use minio::s3::creds::StaticProvider;
use minio::s3::http::BaseUrl;
use minio::s3::response::BucketExistsResponse;
use minio::s3::types::{BucketName, ObjectKey, S3Api};
use minio::s3::{MinioClient, MinioClientBuilder};
use std::env;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
    let endpoint = env::var("S3_ENDPOINT")?;
    let access_key = env::var("S3_ACCESS_KEY")?;
    let secret_key = env::var("S3_SECRET_KEY")?;

    let base_url = endpoint.parse::<BaseUrl>()?;
    let provider = StaticProvider::new(&access_key, &secret_key, None);
    let client: MinioClient = MinioClientBuilder::new(base_url)
        .provider(Some(provider))
        .build()?;

    let bucket = BucketName::new("rust-quickstart")?;
    let object = ObjectKey::new("hello.txt")?;

    let exists: BucketExistsResponse = client
        .bucket_exists(bucket.clone())?
        .build()
        .send()
        .await?;

    if !exists.exists() {
        client
            .create_bucket(bucket.clone())?
            .build()
            .send()
            .await?;
    }

    client
        .put_object_content(
            bucket,
            object,
            ObjectContent::from("hello from SILO\n"),
        )?
        .build()
        .send()
        .await?;

    println!("Uploaded hello.txt");
    Ok(())
}

使用 cargo run 运行示例。仓库的维护中示例API 文档涵盖文件上传、流处理、加密、通知、对象锁定等操作。

生产检查清单

  • 启用 TLS,并验证服务端证书。
  • 从密钥管理系统或受保护的环境中加载凭据。
  • 只授予应用实际需要的存储桶与对象权限。
  • 同时固定并验证 Rust 工具链、SDK、Tokio、HTTP、TLS 与密码学特性。
  • 定义超时,并显式处理错误、重试、任务取消与未完成的分段上传。

服务端策略配置见身份与访问管理