74 lines
2.2 KiB
Go
74 lines
2.2 KiB
Go
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)
|
|
}
|
|
}
|