如果你使用阿里云的 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 页
评论区
写评论还没有评论