Skip to content

V 0.13.0

Latest

Choose a tag to compare

@tu6ge tu6ge released this 03 Feb 02:47

What's Changed

  • 使用大模型优化了代码结构 by @tu6ge in #35

示例代码

use aliyun_oss_client::{Client, Bucket};
use futures_util::StreamExt;

async fn run() -> Result<(), aliyun_oss_client::Error> {
    let client = Client::from_env()?;
    // or let client = Client::new("key_xxx", "secret_yyy", "endpoint_url")?;

    // 获取 buckets 列表
    let buckets = client.get_buckets().await?;

    // 用流的方式获取文件列表
    // 接口每次请求只读取5个文件,随着 next() 函数的不断调用,每隔五个会重新调用一次接口,获取下一页的文件
    let mut stream = Client::from_env()?
        .bucket("honglei123")?
        .max_keys(5)
        .objects();

    let mut i = 0;
    while let Some(item) = stream.next().await {
        println!("{item:?}");
        i = i + 1;
        if i > 7 {
            // 不加限制的话,会获取所有文件
            break;
        }
    }

    // 完整的查询条件示例
    let mut stream = Client::from_env()?
        .bucket("honglei123")?
        .max_keys(5)
        .prefix("prefix1/")
        .delimiter("/")
        .continuation_token("foo")
        .encoding_type("foo2")
        .start_after("foo3")
        .fetch_owner(true)
        .objects();

    // 查询 Object 并转化成自定义类型
    #[derive(Debug, Deserialize)]
    struct MyObject {
        Key: String,
    }
    let mut stream = Client::from_env()?
        .bucket("honglei123")?
        .max_keys(5)
        .objects_as::<MyObject>();

    // 获取文件的详细信息
    let obj_info = Bucket::from_env()?
        .object("abc.txt")
        .get_info()
        .await?;

    // 上传文件
    let res = Bucket::from_env()?
        .object("abc2.txt")
        .content_type("text/plain;charset=utf-8")
        .upload("aaab")
        .await?;

    // 使用文件句柄上传文件
    let mut f = tokio::fs::File::open("example_file.txt").await?;
    let info = Bucket::from_env()?
        .object("abc_file.txt")
        .content_type("text/plain;charset=utf-8")
        .upload(f)
        .await?;

     // 使用目录上传文件
    let res = Bucket::from_env()?
        .object("abc2.txt")
        .content_type("text/plain;charset=utf-8")
        .upload_file("local.txt")
        .await?;

    // 下载文件到文件句柄
    // 使用流式下载,支持边下载边解压/压缩
    let mut file = tokio::fs::File::create("aaa.txt").await?;
    let res = Bucket::from_env()?
        .object("download1.jpg")
        .download(&mut file)
        .await?;

    //下载文件到指定文件路径
    let res = Bucket::from_env()?
        .object("download1.jpg")
        .download_to_file("local.jpg")
        .await?;

    //获取下载文件的 Vec<u8> 内容
    let content = Bucket::from_env()?
        .object("download1.jpg")
        .download_to_bytes()
        .await?;

    //获取下载文件的 String 内容
    let content = Bucket::from_env()?
        .object("download1.jpg")
        .download_to_string()
        .await?;

    // 复制文件
    let res = Bucket::from_env()?
        .object("new_file.txt")
        .copy_source("/bucket_name/source_file.txt")
        .content_type("text/plain;charset=utf-8")
        .copy()
        .await?;

    // 分片上传(大文件)
    let result = Bucket::from_env()?
        .object("myvideo23.mov")
        .multipart()
        //.part_size(3 * 1024 * 1024) // 调整分片大小,默认 1M
        .from_file("./video.mov")
        .upload()
        .await?;

    // 删除文件
    let result = Bucket::from_env()?
        .object("abc.txt")
        .delete()
        .await?;

    Ok(())
}

Full Changelog: v0.13.0-alpha12...v0.13.0