#cloud-storage #upload #object-storage #cos #rust

cos_upload

A Rust library for uploading files to COS (Cloud Object Storage)

2 releases

0.1.1 Oct 30, 2024
0.1.0 Sep 30, 2024

#1179 in Web programming

38 downloads per month

Apache-2.0

30KB
541 lines

cos_upload

Crates.io Documentation License

注意:这是一个临时的用于上传文件到腾讯云对象存储(COS)的 Rust 库。

cos_upload 是一个简单的 Rust 库,用于将文件上传到腾讯云对象存储(COS)。它提供了简单和分块上传的功能,可以根据文件大小自动选择合适的上传方式。

功能

  • 支持普通上传和分块上传
  • 自动根据文件大小选择上传方式
  • 支持获取对象元数据
  • 支持删除对象

安装

将以下行添加到你的 Cargo.toml 文件中:

[dependencies]
cos_upload = "0.1.1"

使用示例

环境变量

TENCENT_SECRET_ID=
TENCENT_SECRET_KEY=

TENCENT_COS_REGION=
TENCENT_COS_BUCKET=

代码示例

use anyhow::Result;
use chrono::Utc;
use cos_upload::{Config, Uploader};
use std::collections::HashMap;

#[tokio::main]
async fn main() -> Result<()> {
    dotenv::dotenv().ok();
    
    // 从环境变量创建配置
    let config = Config::from_env()?;
    
    // 或者手动创建配置
    // let config = Config::new(
    //     "secret_id".to_string(),
    //     "secret_key".to_string(),
    //     "region".to_string(),
    //     "bucket".to_string()
    // );
    
    // 创建上传器实例
    let uploader = Uploader::new(config);
    
    // 创建并添加对象元数据
    let mut metadata = HashMap::new();
    metadata.insert("user-id".to_string(), "123".to_string());
    metadata.insert("username".to_string(), "sample_user".to_string());
    metadata.insert("source".to_string(), "sample_source".to_string());
    metadata.insert("upload-time".to_string(), Utc::now().to_rfc3339());

    // 上传文件,使用通用文件路径示例
    let file_path = "path/to/local/testfile";
    let object_key = "uploads/user_123/sample_file"; // 按用户组织路径

    match uploader.upload_file(file_path, object_key, Some(metadata)).await {
        Ok(url) => println!("文件上传成功。URL: {}", url),
        Err(e) => eprintln!("文件上传失败: {}", e),
    }

    Ok(())
}

更多详细示例和用法,请参阅 文档

注意事项

  1. 这是一个临时的库,可能不适合在生产环境中使用。
  2. 使用前请确保您有有效的腾讯云 COS 账户和相应的权限。
  3. 请妥善保管您的 SecretId 和 SecretKey,不要将其硬编码在代码中或提交到版本控制系统。

许可证

根据 Apache License 2.0 许可证授权。

Dependencies

~10–23MB
~342K SLoC