package cloudflare import ( "context" "fmt" "github.com/cloudflare/cloudflare-go/v4" "github.com/cloudflare/cloudflare-go/v4/accounts" "github.com/cloudflare/cloudflare-go/v4/option" "github.com/cloudflare/cloudflare-go/v4/r2" "log" ) type CloudflareClient struct { Client *cloudflare.Client Ctx context.Context AccountsID string } func NewCloudflare(apiKey string, ctx context.Context) *CloudflareClient { client := cloudflare.NewClient(option.WithAPIToken(apiKey)) resp, err := client.Accounts.List(ctx, accounts.AccountListParams{}) if err != nil { log.Fatal(err) } return &CloudflareClient{ Client: client, Ctx: ctx, AccountsID: resp.Result[0].ID, } } func (r *CloudflareClient) Create(bucketName string) { bucket, err := r.Client.R2.Buckets.New(r.Ctx, r2.BucketNewParams{ AccountID: cloudflare.F(r.AccountsID), Name: cloudflare.F(bucketName), LocationHint: cloudflare.F(r2.BucketNewParamsLocationHintApac), StorageClass: cloudflare.F(r2.BucketNewParamsStorageClassStandard), Jurisdiction: cloudflare.F(r2.BucketNewParamsCfR2JurisdictionDefault), }) if err != nil { panic(err) } print(bucket.Name) } // GetBuckets 获取指定存储桶 func (r *CloudflareClient) GetBuckets(bucketsName string) { bucket, err := r.Client.R2.Buckets.Get(r.Ctx, bucketsName, r2.BucketGetParams{ AccountID: cloudflare.F(r.AccountsID), }) if err != nil { log.Fatalf("获取存储桶失败: %v", err) } metrics, err := r.Client.R2.Buckets.Metrics.List(r.Ctx, r2.BucketMetricListParams{ AccountID: cloudflare.F(r.AccountsID), }) fmt.Printf("📦 存储桶名称: %s\n", bucket.Name) fmt.Printf("📦 存储桶名称: %s\n", bucket.Location) fmt.Printf("🔧 默认存储类型: %s\n", bucket.StorageClass) fmt.Println("总存储量:", metrics.Standard.Uploaded.PayloadSize+metrics.Standard.Uploaded.MetadataSize) } func (r *CloudflareClient) GetBucketsList() { resp, err := r.Client.R2.Buckets.List(r.Ctx, r2.BucketListParams{ AccountID: cloudflare.F(r.AccountsID), }) if err != nil { log.Fatal(err) } for _, bucket := range resp.Buckets { fmt.Printf("📦 存储桶: %s | 区域: %s | 存储类: %s\n", bucket.Name, bucket.Location, bucket.StorageClass) } }