Skip to content

使用大模型优化了代码结构#35

Merged
tu6ge merged 26 commits into
masterfrom
with-llvm
Feb 3, 2026
Merged

使用大模型优化了代码结构#35
tu6ge merged 26 commits into
masterfrom
with-llvm

Conversation

@tu6ge
Copy link
Copy Markdown
Owner

@tu6ge tu6ge commented Feb 3, 2026

目前的结构如下:

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(())
}

@tu6ge tu6ge merged commit d50b1de into master Feb 3, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant