3 releases

0.1.2 Nov 5, 2024
0.1.1 Nov 5, 2024
0.1.0 Nov 5, 2024

#18 in #qiniu

MIT/Apache

15KB
199 lines

spring-qiniu

基于官方 qiniu-sdk 简单实现上传图片、视频到七牛云存储。

该版本善存在缺陷:byte 数据上传采用本地缓存再上传到七牛云。官方提供render上传方法过于曲折暂不使用。

由于 github 访问受阻,使用自建 gitea 仓库,仓库地址:https://gitea.1000duo.cn/qianduo/spring-qiniu.git (账号:global 密码:global123456)

#[cfg(test)]
mod tests {
    use bytes::Bytes;
    use spring_qiniu::config::QiniuConfig;
    use spring_qiniu::upload::QiniuUpload;
    use tokio::fs::File;
    use tokio::io::AsyncReadExt;

    fn get_qiniu_upload() -> QiniuUpload {
        let access_key = "access_key";
        let secret_key = "secret_key";
        let bucket_name = "bucket_name";
        let config = QiniuConfig {
            access_key: access_key.to_string(),
            secret_key: secret_key.to_string(),
            bucket_name: bucket_name.to_string(),
            domain: "https://cdn.domain.cn".to_string(),
            image_size: 1024*1024*2,
            video_size: 1024*1024*10,
            image_ext: vec!["jpg".to_string(), "png".to_string(), "gif".to_string(), "bmp".to_string(), "jpeg".to_string(), "webp".to_string()],
            video_ext: vec!["mp4".to_string(), "avi".to_string(), "wmv".to_string(), "mov".to_string()],
        };
        QiniuUpload::new(config)
    }

    #[tokio::test]
    async fn test_upload_image() {
        let upload = get_qiniu_upload();
        println!("{:?}", upload);
        let resp = upload.upload_image("sys", "test.png").await;
        println!("{:?}", resp);
        if let Ok(file) = resp {
            println!("{:?}", file.url());
        }
    }

    #[tokio::test]
    async fn test_upload_image_render() {
        let upload = get_qiniu_upload();
        println!("{:?}", upload);
        let file = File::open("test.png").await;
        if file.is_err() {
            eprintln!("file open failed");
            return;
        }
        let mut file = file.unwrap();
        println!("{:?}", file);
        let metadata = file.metadata().await.expect("TODO: panic message");
        let mut bytes = Vec::with_capacity(metadata.len() as usize);
        file.read_to_end(&mut bytes).await.expect("TODO: panic message");

        let byte = Bytes::from(bytes);
        let resp = upload.upload_image_bytes("sys", "png", &byte).await;
        println!("{:?}", resp);
        if let Ok(file) = resp {
            println!("{:?}", file.url());
        }
    }

    #[tokio::test]
    async fn test_upload_video() {
        let upload = get_qiniu_upload();
        println!("{:?}", upload);
        let resp = upload.upload_video("sys", "test.mp4").await;
        println!("{:?}", resp);
        if let Ok(file) = resp {
            println!("{:?}", file.url());
        }
    }

    #[tokio::test]
    async fn test_upload_video_render() {
        let upload = get_qiniu_upload();
        println!("{:?}", upload);
        let file = File::open("test.mp4").await;
        if file.is_err() {
            eprintln!("file open failed");
            return;
        }
        let mut file = file.unwrap();
        println!("{:?}", file);
        let metadata = file.metadata().await.expect("TODO: panic message");
        let mut bytes = Vec::with_capacity(metadata.len() as usize);
        file.read_to_end(&mut bytes).await.expect("TODO: panic message");

        let byte = Bytes::from(bytes);
        let resp = upload.upload_video_bytes("sys", "mp4", &byte).await;
        println!("{:?}", resp);
        if let Ok(file) = resp {
            println!("{:?}", file.url());
        }
    }
}

Dependencies

~34–50MB
~878K SLoC