package main import ( "context" "fmt" "log" "strings" "code.yun.ink/pkg/storagex" "code.yun.ink/pkg/storagex/aliyun" "code.yun.ink/pkg/storagex/aws" ) func init() { // 在应用启动时注册所有支持的服务商 storagex.Register("aliyun", &aliyun.AliyunFactory{}) storagex.Register("aws", &aws.S3Factory{}) // storagex.Register("tencent", &tencent.COSFactory{}) } func main() { // 场景 1: 使用阿里云账号 A 上传 cfgAli := storagex.Config{ Provider: "aliyun", AccountID: "user_123", // 指定账号 Options: map[string]string{ "access_key": "LTAIxxxx", "secret_key": "secretxxxx", "bucket": "my-app-assets", "endpoint": "oss-cn-hangzhou.aliyuncs.com", }, } // 获取上传通道 (自动处理单例复用) uploader, err := storagex.GetUploader("aliyun", "user_123", cfgAli) if err != nil { log.Fatal(err) } // 执行上传 result, err := uploader.PutObject(context.Background(), "images/test.png", strings.NewReader("file content")) if err != nil { log.Fatal(err) } fmt.Printf("上传成功: %s\n", result.URL) // 场景 2: 使用 AWS 账号 B 上传 // cfgAws := storagex.Config{ // Provider: "aws", // AccountID: "finance_dept", // Options: map[string]string{ // "region": "ap-northeast-1", // "bucket": "finance-bucket", // // AK/SK... // }, // } // 注意:这里会创建一个新的 S3 客户端,与阿里云互不干扰 // awsUploader, _ := storagex.GetUploader("aws", "finance_dept", cfgAws) // awsUploader.Upload(...) }