aliyun-oss-client

aliyun OSS 的一个客户端

本不想重复造轮子,但是发现官方提供的 sdk 还有优化的空间,然后就尝试着写一写,就当是练习 rust 的项目了

使用方法

  1. 在自己的项目里添加如下依赖项 (项目遵循语义化版本规则)

[dependencies] aliyun-oss-client = "^0.3"

  1. 打开你需要使用 oss 的文件,在里面添加如下内容,即可使用:

``` // dotenv 是用于获取配置信息的,可以不使用 extern crate dotenv; use dotenv::dotenv; use std::env;

// 需要提供四个配置信息 let keyid = env::var("ALIYUNKEYID").unwrap(); let keysecret = env::var("ALIYUNKEYSECRET").unwrap(); let endpoint = env::var("ALIYUNENDPOINT").unwrap(); let bucket = env::var("ALIYUNBUCKET").unwrap();

// 获取客户端实例 let client = aliyunossclient::client(&keyid,&keysecret, &endpoint, &bucket); ```

查询所有的 bucket 信息

let response = client.get_bucket_list().unwrap(); println!("buckets list: {:?}", response);

获取 bucket 信息

let response = client.get_bucket_info().unwrap(); println!("bucket info: {:?}", response);

查询当前 bucket 中的 object 列表

let query: HashMap<String,String> = HashMap::new(); let response = client.get_object_list(query).unwrap(); println!("objects list: {:?}", response);

也可以使用 bucket struct 查询 object 列表

``` let mut query:HashMap = HashMap::new(); query.insert("max-keys".tostring(), "5".tostring()); query.insert("prefix".tostring(), "babel".tostring());

let result = client.getbucketinfo().unwrap().getobjectlist(query).unwrap();

println!("object list : {:?}", result);

// 翻页功能 获取下一页数据 println!("next object list: {:?}", result.next().unwrap()); ```

上传文件

``` client.put_file("examples/bg2015071010.png", "examples/bg2015071010.png").expect("上传失败");

// or 上传文件内容 let mut filecontent = Vec::new(); std::fs::File::open(filename) .expect("open file failed").readtoend(&mut filecontent) .expect("readtoend failed"); client.putcontent(&file_content, "examples/bg2015071010.png").expect("上传失败"); ```

删除文件

``` client.delete_object("examples/bg2015071010.png").unwrap();

```

官方 client 对比

优势: - 完整的测试用例 - 单一入口,避免泛引入导致意外的命名冲突 - 链式调用 - 对公共的参数进行了封装,每次调用的时候,只需要传递业务参数即可

不足: - 尚不支持异步调用