< 返回版块

Yuan YQ 发表于 2025-02-27 11:36

Tags:aliyun,oss,sdk

如果你使用阿里云的 OSS,并且使用 Rust 开发后端项目,ali-oss-rs 这个项目可能对你有帮助。

阿里云官方提供了很多语言的 OSS SDK,但是唯独没有 Rust 版本的。crates.io 上有两个不错的工具可以实现 OSS API 调用,但是实现的功能相对有限。所以我决定写一个比较完整的 OSS Rust SDK。

本项目还在积极开发中,目前发布的 v0.1.2 版本提供了常用的基本的操作,包括:

  • 默认使用异步模式,可以启用 blocking 特性使用同步模式
  • 不同的操作拆分到不同的子模块,可以按需引入,减小最后构建输出的文件大小。
  • 启用 serde-support 特性可以使得本项目的一些暴露出来的类型支持序列化(使用 serde 类库)。
  • 启用 serde-camelcase 特性支持序列化时采用小驼峰命名方式,如果需要将数据序列化成 JSON 数据,可以使用此特性。
  • 启用 rust-tls 特性配置 reqwest 采用 Rust TLS。
  • Bucket
    • 创建 bucket
    • 列出 bucket
    • 删除 bucket
    • 获取 bucket 信息
    • 获取 bucket 统计数据
    • 获取 bucket 详细信息
    • 列出 bucket 中的文件
  • Object
    • 创建 object。支持从本地文件、字节数据、Base64 字符串上传。支持回调
    • 创建目录
    • 下载 oject 到本地文件
    • 获取 object 元数据
    • 获取 object 详细的元数据
    • 复制 object
    • 删除 object。 支持批量删除
    • 检查 object 是否存在
    • 向 object 追加内容。支持从本地文件、字节数据、Base64 字符串追加
    • 解冻归档 object
    • 清理解冻的归档 object
    • GET 请求的预签名 URL。主要是在浏览器中预览私有访问的 object
    • 分片上传:支持从文件、字节数据、Base64 字符串分片上传。支持回调
    • 分片上传:列出一个 bucket 中的未完成/未取消的碎片
    • 取消分片上传
    • 分片复制 object。如果要复制大于 1GB 的 object,需要使用分片复制
    dotenvy::dotenv().unwrap();

    // `.env` file should contain the following keys
    //
    // ALI_ACCESS_KEY_ID=your_access_key_id
    // ALI_ACCESS_KEY_SECRET=your_access_key_secret
    // ALI_OSS_REGION=cn-beijing
    // ALI_OSS_ENDPOINT=oss-cn-beijing.aliyuncs.com
    let client = ali_oss_rs::Client::from_env();
    let list_buckets_result = client.list_buckets(None).await?;

    list_buckets_result.buckets.iter().for_each(|b| println!("{}\t{}", b.name, b.storage_class));

    let objects = client
        .list_objects(
            "example-bucket",
            Some(
                ListObjectsOptionsBuilder::default()
                    .prefix("test/")
                    .delimiter('/')
                    .build()
            )
        ).await?;
    objects.contents.iter().for_each(|o| println!("{}\t{}", o.key, o.size));

    Ok(())

欢迎使用,希望可以帮助到你。欢迎提出问题、Bug、PR 等,提前感谢。

Crates.io: https://crates.io/crates/ali-oss-rs

Github Repo: https://github.com/yuqiang-yuan/ali-oss-rs

开发手记

  • 开发 SDK 要比开发应用难,其难在要充分考虑使用场景的便利性
  • 库中的类型以及属性的可见性,目前采用的是最小化可见性的方式,后续会慢慢放开一些类型的可见性
  • 如何尽可能少的产生破坏性更新是一个挑战
  • OSS API 官方文档没有及时更新,并且有些内容说的不是很清楚。可能在某些类型的设定上,和官方 API 存在小的偏差。我尽可能的使用官方的文档和控制台提供的调试工具的对比着看

评论区

写评论

还没有评论

1 共 0 条评论, 1 页