提交qiming-mcp-proxy
This commit is contained in:
85
qiming-mcp-proxy/oss-client/src/config.rs
Normal file
85
qiming-mcp-proxy/oss-client/src/config.rs
Normal file
@@ -0,0 +1,85 @@
|
||||
//! OSS配置管理模块
|
||||
|
||||
use crate::error::{OssError, Result};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// 默认配置常量
|
||||
pub mod defaults {
|
||||
pub const ENDPOINT: &str = "oss-rg-china-mainland.aliyuncs.com";
|
||||
pub const PUBLIC_BUCKET: &str = "nuwa-packages";
|
||||
pub const PRIVATE_BUCKET: &str = "edu-nuwa-packages";
|
||||
pub const REGION: &str = "oss-rg-china-mainland";
|
||||
pub const UPLOAD_DIRECTORY: &str = "edu";
|
||||
}
|
||||
|
||||
/// OSS配置结构体
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct OssConfig {
|
||||
/// OSS endpoint (默认: oss-rg-china-mainland.aliyuncs.com)
|
||||
pub endpoint: String,
|
||||
/// 存储桶名称 (默认: nuwa-packages)
|
||||
pub bucket: String,
|
||||
/// 访问密钥ID (必须通过环境变量设置)
|
||||
pub access_key_id: String,
|
||||
/// 访问密钥Secret (必须通过环境变量设置)
|
||||
pub access_key_secret: String,
|
||||
/// 区域 (默认: oss-rg-china-mainland)
|
||||
pub region: String,
|
||||
/// 上传目录前缀 (默认: edu)
|
||||
pub upload_directory: String,
|
||||
}
|
||||
|
||||
impl OssConfig {
|
||||
/// 创建自定义配置(所有字段需显式提供)
|
||||
pub fn new(
|
||||
endpoint: String,
|
||||
bucket: String,
|
||||
access_key_id: String,
|
||||
access_key_secret: String,
|
||||
region: String,
|
||||
upload_directory: String,
|
||||
) -> Self {
|
||||
Self {
|
||||
endpoint,
|
||||
bucket,
|
||||
access_key_id,
|
||||
access_key_secret,
|
||||
region,
|
||||
upload_directory,
|
||||
}
|
||||
}
|
||||
|
||||
/// 验证配置有效性
|
||||
pub fn validate(&self) -> Result<()> {
|
||||
if self.access_key_id.is_empty() {
|
||||
return Err(OssError::Config("access_key_id 不能为空".to_string()));
|
||||
}
|
||||
if self.access_key_secret.is_empty() {
|
||||
return Err(OssError::Config("access_key_secret 不能为空".to_string()));
|
||||
}
|
||||
if self.endpoint.is_empty() {
|
||||
return Err(OssError::Config("endpoint 不能为空".to_string()));
|
||||
}
|
||||
if self.bucket.is_empty() {
|
||||
return Err(OssError::Config("bucket 不能为空".to_string()));
|
||||
}
|
||||
if self.region.is_empty() {
|
||||
return Err(OssError::Config("region 不能为空".to_string()));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// 获取完整的OSS URL
|
||||
pub fn get_base_url(&self) -> String {
|
||||
format!("https://{}.{}", self.bucket, self.endpoint)
|
||||
}
|
||||
|
||||
/// 获取带前缀的object key
|
||||
pub fn get_prefixed_key(&self, key: &str) -> String {
|
||||
if key.starts_with(&self.upload_directory) {
|
||||
key.to_string()
|
||||
} else {
|
||||
format!("{}/{}", self.upload_directory, key.trim_start_matches('/'))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user