Expand description

一个 aliyun OSS 的客户端

使用方法

  1. cargo.toml 中添加如下依赖项
[dependencies]
aliyun-oss-client = "^0.11"
  1. 初始化配置信息
  • 方式一
use std::env::set_var;
set_var("ALIYUN_KEY_ID", "foo1");
set_var("ALIYUN_KEY_SECRET", "foo2");
set_var("ALIYUN_ENDPOINT", "qingdao");
set_var("ALIYUN_BUCKET", "foo4");
let client = aliyun_oss_client::Client::from_env();
  • 方式二

在项目根目录下创建 .env 文件(需将其加入 .gitignore ),内容:

ALIYUN_KEY_ID=xxxxxxx
ALIYUN_KEY_SECRET=yyyyyyyyyyyyyy
ALIYUN_ENDPOINT=https://oss-cn-shanghai.aliyuncs.com
ALIYUN_BUCKET=zzzzzzzzzz

在需要使用 OSS 的地方,这样设置:

use dotenv::dotenv;
dotenv().ok();
let client = aliyun_oss_client::Client::from_env();
  • 方式三
use aliyun_oss_client::BucketName;
let bucket = BucketName::new("bbb").unwrap();
let client = aliyun_oss_client::Client::new(
    "key1".into(),
    "secret1".into(),
    "qingdao".try_into().unwrap(),
    bucket
);

支持内网访问 Version +0.9

在阿里云的 ECS 上请求 OSS 接口,使用内网 API 有更高的效率,只需要在 ECS 上设置 ALIYUN_OSS_INTERNAL 环境变量为 true 即可

0.12 版本开始,只有在 Client::from_envBucketBase::from_env 这两个方法中 ALIYUN_OSS_INTERNAL 环境变量才起作用, 其他地方,请使用 EndPoint::set_internal 进行切换

查询所有的 bucket 信息

了解更多,请查看 get_bucket_list

    client.get_bucket_list().await;

获取 bucket 信息

了解更多,请查看 get_bucket_info

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

查询当前 bucket 中的 object 列表

了解更多,请查看 get_object_list

查询条件参数有多种方式,具体参考 Bucket::get_object_list 文档

    let response = client.get_object_list([]).await;
    println!("objects list: {:?}", response);

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

了解更多,请查看 Bucket::get_object_list

    let query = [("max-keys".into(), "5".into()), ("prefix".into(), "babel".into())];
    let result = client.get_bucket_info().await.unwrap().get_object_list(query).await;

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

上传文件

了解更多,请查看 put_file, put_content, put_content_base


    use aliyun_oss_client::file::Files;
    client.put_file("examples/bg2015071010.png", "examples/bg2015071010.png").await;

    let path: ObjectPath = "examples/bg2015071010.png".parse().unwrap();
    client.put_file("examples/bg2015071010.png", path).await;

    // or 上传文件内容
    let file_content = std::fs::read("examples/bg2015071010.png").unwrap();
    client
        .put_content(file_content, "examples/bg2015071010.png", |_| {
            Some("image/png")
        })
        .await;

    // or 自定义上传文件 Content-Type
    let file_content = std::fs::read("examples/bg2015071010.png").unwrap();
    client
        .put_content_base(file_content, "image/png", "examples/bg2015071010.png")
        .await;

下载文件

了解更多,请查看 get_object

    use aliyun_oss_client::file::Files;

    // 获取完整文件
    let content = client.get_object("bar.json", ..).await;

    // 获取文件一部分
    let content = client.get_object("bar.json".to_string(), ..100).await;
    let path: ObjectPath = "bar.json".parse().unwrap();
    let content = client.get_object(path, 100..).await;
    let content = client.get_object("bar.json", 100..200).await;

删除文件

了解更多,请查看 delete_object

    use aliyun_oss_client::file::Files;
    client.delete_object("examples/bg2015071010.png").await;

Re-exports

Modules

  • Auth 模块
  • 阻塞模式
  • bucket 操作模块
  • 对 reqwest 进行了简单的封装,加上了 OSS 的签名验证功能
  • 配置类型
  • 解析 aliyun OSS 接口返回的 xml 原始数据的 trait
  • 异常处理模块
  • OSS 文件相关操作
  • Object 相关功能
  • STS 临时访问权限管理服务
  • lib 内置类型的定义模块

Structs

Functions

Derive Macros