# XT - Aliyun OSS SDK
这是一个`Rust`语言编写的阿里云OSS的SDK,依据官网文档并参考了其他语言的实现。
- 基于`tokio-rs`异步运行时与流行的`reqwest`库实现.
- 尽量完整的OSS数据结构描述(`struct`、`enum`).
- `Builder`设计模式的传参风格.
- 实现常用的大部分API.
- 完整`Examples`演示.
```toml
[dependencies]
tokio = {version = "1.36.0", features = ["full"]}
xt-oss = "0.4.4"
```
```rust no_run
//! `cargo run --example api_region_describe -q`
//!
//! 调用DescribeRegions接口查询所有支持地域或者指定地域对应的Endpoint信息,
//! 包括外网Endpoint、内网Endpoint和传输加速Endpoint。
use dotenv;
use std::process;
use xt_oss::prelude::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenv::dotenv().ok();
let options = util::options_from_env();
// let options = oss::Options::new()
// .with_access_key_id("-- your access_key_id --")
// .with_access_key_secret("-- your access_key_secret --");
let client = oss::Client::new(options);
match client
.DescribeRegions()
// .with_region("oss-us-east-1")
.execute()
.await
.unwrap_or_else(|reqwest_error| {
println!("reqweset error: {}", reqwest_error);
process::exit(-1);
}) {
Ok(oss_data) => {
oss_data.content().region_info.iter().for_each(|entry| {
println!("{:>20} | {}", entry.region, entry.internet_endpoint);
});
}
Err(error_message) => {
// let message = error_message.content();
println!("request id: {}", &error_message.request_id());
println!("oss error: {}", &error_message.content());
}
}
Ok(())
}
```
## `Options` 配置
- `access_key_id` 通过阿里云控制台创建的AccessKey ID
- `access_key_secret` 通过阿里云控制台创建的AccessKey Secret
- `sts_token` 使用临时授权方式
- `bucket` 通过控制台或PutBucket创建的Bucket
- `endpoint` OSS访问域名。
- `region` Bucket所在的区域,默认值为oss-cn-hangzhou
- `internal` 是否使用阿里云内网访问,默认值为false
- `cname` 是否支持上传自定义域名,默认值为false
- `is_request_pay` Bucket是否开启请求者付费模,默认值为false
- `secure` 设置secure为true,则使用HTTPS;设置secure为false,则使用HTTP
- `timeout` 超时时间,默认值为60秒
### 构建方式
```rust no_run
// 构建方式
let options = oss::Options::new()
.with_access_key_id("access_key_id")
.with_access_key_secret("access_key_secret")
.with_bucket("xtoss-ex1")
.with_cname(true)
.with_endpoint("http://cdn-dev.xuetube.com")
.with_internal(false)
.with_region("oss-cn-shanghai")
.with_secret(true)
// .with_sts_token("sts token")
.with_timeout(60);
let client = oss::Client::new(options);
```
### 从.env加载,格式参见 .env.example.
```rust no_run
// ...
dotenv::dotenv().ok();
let options = util::options_from_env();
let client = oss::Client::new(options);
// ...
```
## 参数构建
## 错误处理
## 其他
## 实现的Api
### 关于Service/Region
- [★ `ListBuckets(GetService)`](oss/struct.Client.html#method.ListBuckets)
- [★ `DescribeRegions`](https://www.example.com)
### Bucket - 基础操作
- [★ `PutBucket`](https://www.example.com)
- [★ `DeleteBucket`](https://www.example.com)
- [★ `ListObjects`](https://www.example.com)
- [★ `ListObjectsV2`](https://www.example.com)
- [★ `GetBucketInfo`](https://www.example.com)
- [★ `GetBucketLocation`](https://www.example.com)
- [★ `GetBucketStat`](https://www.example.com)
### 合规保留策略(WORM)
- [★ `InitiateBucketWorm`](https://www.example.com)
- [★ `AbortBucketWorm`](https://www.example.com)
- [★ `CompleteBucketWorm`](https://www.example.com)
- [★ `ExtendBucketWorm`](https://www.example.com)
- [★ `GetBucketWorm`](https://www.example.com)
### Bucket 权限控制(ACL)
- [★ `PutBucketAcl`](https://www.example.com)
- [★ `GetBucketAcl`](https://www.example.com)
### Bucket 生命周期(Lifecycle)
- [★ `PutBucketLifecycle`](https://www.example.com)
- [★ `GetBucketLifecycle`](https://www.example.com)
- [★ `DeleteBucketLifecycle`](https://www.example.com)
### Bucket 传输加速(TransferAcceleration)
- [★ `PutBucketTransferAcceleration`](https://www.example.com)
- [★ `GetBucketTransferAcceleration`](https://www.example.com)
### Bucket 版本控制(Versioning)
- [★ `PutBucketVersioning`](https://www.example.com)
- [★ `GetBucketVersioning`](https://www.example.com)
- [☆ `ListObjectVersions(GetBucketVersions )x`](https://www.example.com)
### Bucket 授权策略(Policy)
- [★ `PutBucketPolicy`](https://www.example.com)
- [★ `GetBucketPolicy`](https://www.example.com)
- [★ `DeleteBucketPolicy`](https://www.example.com)
### Bucket 日志管理(Logging)
- [★ `PutBucketLogging`](https://www.example.com)
- [★ `GetBucketLogging`](https://www.example.com)
- [★ `DeleteBucketLogging`](https://www.example.com)
### Bucket 静态网站(Website)
- [★ `PutBucketWebsite`](https://www.example.com)?
- [★ `GetBucketWebsite`](https://www.example.com)
- [★ `DeleteBucketWebsite`](https://www.example.com)
### Bucket 防盗链(Referer)
- [★ `PutBucketReferer`](https://www.example.com)
- [★ `GetBucketReferer`](https://www.example.com)
### Bucket 标签(Tags)
- [★ `PutBucketTags`](https://www.example.com)
- [★ `GetBucketTags`](https://www.example.com)
- [★ `DeleteBucketTags`](https://www.example.com)
### Bucket 加密(Encryption)
- [★ `PutBucketEncryption`](https://www.example.com)
- [★ `GetBucketEncryption`](https://www.example.com)
- [★ `DeleteBucketEncryption`](https://www.example.com)
### Bucket 跨域资源共享(CORS)
- [★ `PutBucketCors`](https://www.example.com)
- [★ `GetBucketCors`](https://www.example.com)
- [★ `DeleteBucketCors`](https://www.example.com)
- [★ `Options`](https://www.example.com)
### Bucket 自定义域名(CNAME)
- [★ `CreateCnameToken`](https://www.example.com)
- [★ `GetCnameToken`](https://www.example.com)
- [★ `PutCname`](https://www.example.com)?
- [★ `ListCname`](https://www.example.com)
- [★ `DeleteCname`](https://www.example.com)
### Bucket 图片样式(Style)
- [★ `PutStyle`](https://www.example.com)
- [★ `GetStyle`](https://www.example.com)
- [★ `ListStyle`](https://www.example.com)
- [★ `DeleteStyle`](https://www.example.com)
### Object 基础操作 Stand
- [★ `PutObject`](https://www.example.com)
- [★ `GetObject`](https://www.example.com)
- [★ `CopyObject`](https://www.example.com)
- [★ `AppendObject`](https://www.example.com)
- [★ `DeleteObject`](https://www.example.com)
- [★ `DeleteMultipleObjects`](https://www.example.com)
- [★ `HeadObject`](https://www.example.com)
- [★ `GetObjectMeta`](https://www.example.com)
### Object 分片上传(MultipartUpload)
- [★ `InitiateMultipartUpload`](https://www.example.com)
- [★ `UploadPart`](https://www.example.com)
- [★ `UploadPartCopy`](https://www.example.com)
- [★ `CompleteMultipartUpload`](https://www.example.com)
- [★ `AbortMultipartUpload`](https://www.example.com)
- [★ `ListMultipartUploads`](https://www.example.com)
- [★ `ListParts`](https://www.example.com)
### Object 权限控制(ACL)
- [★ `PutObjectACL`](https://www.example.com)
- [★ `GetObjectACL`](https://www.example.com)
### Object 软链接(Symlink)
- [★ `PutSymlink`](https://www.example.com)
- [★ `GetSymlink`](https://www.example.com)
### Object 标签(Tagging)
- [★ `PutObjectTagging`](https://www.example.com)
- [★ `GetObjectTagging`](https://www.example.com)
- [★ `DeleteObjectTagging`](https://www.example.com)