# Upyun sdk for rust
又拍云存储 Rust SDK,基于 [又拍云存储 HTTP REST API 接口](https://help.upyun.com/knowledge-base/rest_api/) 和 [又拍云云处理文档 ](http://docs.upyun.com/cloud/)开发。
## 目录
* [用法](#用法)
* [添加依赖](#添加依赖)
* [初始化 Upyun](#初始化-upyun)
* [又拍云 REST API 接口](#又拍云-rest-api-接口)
* [获取空间存储使用量](#获取空间存储使用量)
* [创建目录](#创建目录)
* [删除目录或文件](#删除目录或文件)
* [获取文件信息](#获取文件信息)
* [获取目录文件列表](#获取目录文件列表)
* [复制文件](#复制文件)
* [移动文件](#移动文件)
* [下载文件](#下载文件)
* [上传文件](#上传文件)
## 用法
### 添加依赖
```toml
[dependencies]
upyun-sdk = "0.1.3"
```
### 初始化 Upyun
```rust
fn main() {
let upyun = UpYun::builder()
.bucket("service_name") // 必须
.operator("user") // 必须
.password("123456") // 必须
.timeout(30000) // 请求超时时间,可选,默认30s
.endpoint(Endpoint::Auto) // 接入点,可选,默认为自动识别接入点
.danger_accept_invalid_certs(false) // 忽略证书验证,可选,默认为 false
.build();
}
```
### 又拍云 REST API 接口
#### 获取空间存储使用量
```rust
async fn main() {
let usage: u64 = upyun.usage().await.unwrap();
}
```
#### 创建目录
```rust
async fn main() {
upyun.mkdir("/rust").await.unwrap();
}
```
#### 删除目录或文件
path 可以是目录或文件路径,如果是目录,只允许删除空的目录,否则删除请求会被拒绝。
```rust
async fn main() {
upyun.rm("/rust").await.unwrap();
}
```
#### 获取文件信息
```rust
async fn main() {
let info: FileInfo = upyun.file_info("/rust/image.png").await.unwrap();
}
```
#### 获取目录文件列表
```rust
async fn main() {
// 参数可选
let params = ListDirParams {
x_list_iter: None,
x_list_limit: Some(2),
x_list_order: Some("desc".to_string())
};
let dir_list = upyun.list_dir("/rust", Some(params)).await.unwrap();
}
```
#### 复制文件
同一个 `bucket` 下复制文件。并且它只能操作文件,不能操作文件夹。
```rust
async fn main() {
let params = CopyParams {
source_path: "/rust/image.jpg".to_string(),
x_upyun_metadata_directive: None,
content_md5: None
};
upyun.copy_file("/rust/image_copy.jpg", ¶ms).await.unwrap();
}
```
#### 移动文件
该操作可以实现文件重命名、文件移动。同一个 `bucket` 下移动文件,它只能操作文件,不能操作文件夹。
```rust
async fn main() {
let params = MoveParams {
source_path: "/rust/image.jpg".to_string(),
x_upyun_metadata_directive: None,
content_md5: None
};
upyun.move_file("/rust/1/image.jpg", ¶ms).await.unwrap();
}
```
#### 下载文件
```rust
async fn main() {
let bytes: Vec<u8> = upyun.download("/rust/image.jpg").await.unwrap();
let path = Path::new("./image.jpg");
let mut file = File::create(path).unwrap();
file.write_all(&bytes).unwrap();
}
```
#### 上传文件
```rust
async fn main() {
let file: Vec<u8> = read_file_to_vec("./image.jpg").unwrap();
// 可选参数
let params = UploadParams {
content_type: None,
content_md5: None,
content_secret: None,
x_upyun_meta_x: None,
x_upyun_meta_ttl: None,
x_gmkerl_thumb: None,
};
upyun.upload("/rust/1/image.jpg", file, Some(params)).await.unwrap()
}
```