From 5c0da54d15673c150a4a4ee5576b0c73f9d4b13f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=85=89=E6=98=A5?= Date: Wed, 25 May 2022 13:17:56 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E9=98=BF=E9=87=8C=E4=BA=91=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=86=85=E7=BD=91=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 10 +++- aliyun.go | 140 ++++++++++++++++++++++++++++++++++++++++++++++++----- go.mod | 8 +-- go.sum | 16 +++--- version.go | 2 +- 5 files changed, 150 insertions(+), 26 deletions(-) diff --git a/.drone.yml b/.drone.yml index 511f0fc..c56c479 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,9 +3,15 @@ type: docker name: clone steps: - - name: test-golang + - name: Test image: golang:1.18 commands: - go env -w GO111MODULE=on - go env -w GOPROXY=https://goproxy.cn,direct - - go test -v ./... \ No newline at end of file + - go test -v ./... + - name: Benchmark + image: golang:1.18 + commands: + - go env -w GO111MODULE=on + - go env -w GOPROXY=https://goproxy.cn,direct + - go test -bench=. -benchmem \ No newline at end of file diff --git a/aliyun.go b/aliyun.go index adc0ddf..ad42d29 100644 --- a/aliyun.go +++ b/aliyun.go @@ -1,37 +1,155 @@ package gostorage import ( + "errors" "github.com/aliyun/aliyun-oss-go-sdk/oss" "io" + "sync" ) // AliYunConfig 阿里云配置 type AliYunConfig struct { - AccessKeyId string - AccessKeySecret string - Endpoint string - BucketName string + AccessKeyId string // 账号信息 + AccessKeySecret string // 账号信息 + Endpoint string // 地域节点 外网访问 test3 + EndpointEcs string // 地域节点 ECS 的经典网络访问(内网) test1 + EndpointAccelerate string // 地域节点 传输加速域名(全地域上传下载加速 test4 + BucketName string // 存储空间名称 } // AliYun 阿里云 type AliYun struct { AliYunConfig - error error // 错误信息 - client *oss.Client // 驱动 - bucket *oss.Bucket // 存储空间 + error error // 错误信息 + client *oss.Client // 驱动 + bucket *oss.Bucket // 存储空间 + endpointError error // 错误信息 + endpointEcsError error // 错误信息 + endpointAccelerateError error // 错误信息 } // NewAliYun 初始化 // https://help.aliyun.com/document_detail/32144.html -func NewAliYun(config *AliYunConfig) *AliYun { +func NewAliYun(config *AliYunConfig) (*AliYun, error) { app := &AliYun{} app.AccessKeyId = config.AccessKeyId app.AccessKeySecret = config.AccessKeySecret app.Endpoint = config.Endpoint + app.EndpointEcs = config.EndpointEcs + app.EndpointAccelerate = config.EndpointAccelerate app.BucketName = config.BucketName - app.client, app.error = oss.New(app.Endpoint, app.AccessKeyId, app.AccessKeySecret) - app.bucket, app.error = app.client.Bucket(app.BucketName) - return app + + wg := sync.WaitGroup{} + wg.Add(3) + go app.configEndpointEcs(&wg) + go app.configEndpoint(&wg) + go app.configEndpointAccelerate(&wg) + wg.Wait() + + // 判断结果 + if app.endpointEcsError == nil { + return app, nil + } + if app.endpointError == nil { + return app, nil + } + if app.endpointAccelerateError == nil { + return app, nil + } + + return app, errors.New("链接失败") +} + +func (c *AliYun) configEndpoint(wg *sync.WaitGroup) { + defer wg.Done() + + if c.Endpoint == "" { + c.endpointError = errors.New("没有配置") + return + } + + // 创建链接 + c.client, c.endpointError = oss.New(c.Endpoint, c.AccessKeyId, c.AccessKeySecret) + if c.endpointError != nil { + return + } + + // 填写存储空间名称 + c.bucket, c.endpointError = c.client.Bucket(c.BucketName) + if c.endpointError != nil { + return + } + + // 判断存储空间是否存在 + _, c.endpointError = c.client.IsBucketExist(c.BucketName) + if c.endpointError != nil { + return + } + + c.endpointError = nil + return +} + +func (c *AliYun) configEndpointEcs(wg *sync.WaitGroup) { + defer wg.Done() + + if c.EndpointEcs == "" { + c.endpointEcsError = errors.New("没有配置") + return + } + + // 创建链接 + c.client, c.endpointEcsError = oss.New(c.EndpointEcs, c.AccessKeyId, c.AccessKeySecret) + if c.endpointEcsError != nil { + return + } + + // 填写存储空间名称 + c.bucket, c.endpointEcsError = c.client.Bucket(c.BucketName) + if c.endpointEcsError != nil { + return + } + + // 判断存储空间是否存在 + _, c.endpointEcsError = c.client.IsBucketExist(c.BucketName) + if c.endpointEcsError != nil { + return + } + + c.endpointEcsError = nil + + return +} + +func (c *AliYun) configEndpointAccelerate(wg *sync.WaitGroup) { + defer wg.Done() + + if c.EndpointAccelerate == "" { + c.endpointAccelerateError = errors.New("没有配置") + return + } + + // 创建链接 + c.client, c.endpointAccelerateError = oss.New(c.EndpointAccelerate, c.AccessKeyId, c.AccessKeySecret) + if c.endpointAccelerateError != nil { + return + } + + // 填写存储空间名称 + c.bucket, c.endpointAccelerateError = c.client.Bucket(c.BucketName) + if c.endpointAccelerateError != nil { + return + } + + // 判断存储空间是否存在 + _, c.endpointAccelerateError = c.client.IsBucketExist(c.BucketName) + if c.endpointAccelerateError != nil { + return + } + + c.endpointAccelerateError = nil + + return } // Bucket 存储空间 diff --git a/go.mod b/go.mod index 441bbaa..31433d4 100644 --- a/go.mod +++ b/go.mod @@ -3,13 +3,13 @@ module go.dtapp.net/gostorage go 1.18 require ( - github.com/aliyun/aliyun-oss-go-sdk v2.2.3+incompatible - github.com/aws/aws-sdk-go v1.44.19 - github.com/baidubce/bce-sdk-go v0.9.116 + github.com/aliyun/aliyun-oss-go-sdk v2.2.4+incompatible + github.com/aws/aws-sdk-go v1.44.21 + github.com/baidubce/bce-sdk-go v0.9.120 github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.12+incompatible github.com/ks3sdklib/aws-sdk-go v1.1.4 github.com/qiniu/go-sdk/v7 v7.12.1 - github.com/tencentyun/cos-go-sdk-v5 v0.7.34 + github.com/tencentyun/cos-go-sdk-v5 v0.7.35 github.com/upyun/go-sdk/v3 v3.0.2 ) diff --git a/go.sum b/go.sum index ee71733..6d17b40 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,13 @@ github.com/KscSDK/ksc-sdk-go v0.1.42/go.mod h1:isHlJZi429ff5JLemSc10h7nznNgzJAY4MmNM8u7SBo= github.com/QcloudApi/qcloud_sign_golang v0.0.0-20141224014652-e4130a326409/go.mod h1:1pk82RBxDY/JZnPQrtqHlUFfCctgdorsd9M06fMynOM= -github.com/aliyun/aliyun-oss-go-sdk v2.2.3+incompatible h1:KlwIELiuuvj7uMeEXrgXecPE3+xz/gGsDSnhL6Eztq0= -github.com/aliyun/aliyun-oss-go-sdk v2.2.3+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= +github.com/aliyun/aliyun-oss-go-sdk v2.2.4+incompatible h1:cD1bK/FmYTpL+r5i9lQ9EU6ScAjA173EVsii7gAc6SQ= +github.com/aliyun/aliyun-oss-go-sdk v2.2.4+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= github.com/aws/aws-sdk-go v1.25.3/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.42.27/go.mod h1:OGr6lGMAKGlG9CVrYnWYDKIyb829c6EVBRjxqjmPepc= -github.com/aws/aws-sdk-go v1.44.19 h1:dhI6p4l6kisnA7gBAM8sP5YIk0bZ9HNAj7yrK7kcfdU= -github.com/aws/aws-sdk-go v1.44.19/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/baidubce/bce-sdk-go v0.9.116 h1:Z1iMDzM3nL8buwNDekRovol7RRHq+vbFrULu9Idj17E= -github.com/baidubce/bce-sdk-go v0.9.116/go.mod h1:zbYJMQwE4IZuyrJiFO8tO8NbtYiKTFTbwh4eIsqjVdg= +github.com/aws/aws-sdk-go v1.44.21 h1:xZBdJmgkTQuIrbq5jSi5gyUwyz4eRTvjmLoT+c+Ao/A= +github.com/aws/aws-sdk-go v1.44.21/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/baidubce/bce-sdk-go v0.9.120 h1:cm5kYeqPpAcVeIyLUscqNtebFAXHi8Ta6LCRwj1/bZE= +github.com/baidubce/bce-sdk-go v0.9.120/go.mod h1:zbYJMQwE4IZuyrJiFO8tO8NbtYiKTFTbwh4eIsqjVdg= github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA= github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= @@ -75,8 +75,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.194/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.194/go.mod h1:yrBKWhChnDqNz1xuXdSbWXG56XawEq0G5j1lg4VwBD4= -github.com/tencentyun/cos-go-sdk-v5 v0.7.34 h1:xm+Pg+6m486y4eugRI7/E4WasbVmpY1hp9QBSRErgp8= -github.com/tencentyun/cos-go-sdk-v5 v0.7.34/go.mod h1:4dCEtLHGh8QPxHEkgq+nFaky7yZxQuYwgSJM87icDaw= +github.com/tencentyun/cos-go-sdk-v5 v0.7.35 h1:XVk5GQ4eH1q+DBUJfpaMMdU9TJZWMjwNNwv0PG5nbLQ= +github.com/tencentyun/cos-go-sdk-v5 v0.7.35/go.mod h1:4dCEtLHGh8QPxHEkgq+nFaky7yZxQuYwgSJM87icDaw= github.com/upyun/go-sdk/v3 v3.0.2 h1:Ke+iOipK5CT0xzMwsgJsi7faJV7ID4lAs+wrH1RH0dA= github.com/upyun/go-sdk/v3 v3.0.2/go.mod h1:P/SnuuwhrIgAVRd/ZpzDWqCsBAf/oHg7UggbAxyZa0E= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= diff --git a/version.go b/version.go index a2d06ef..d441a20 100644 --- a/version.go +++ b/version.go @@ -1,3 +1,3 @@ package gostorage -const Version = "1.0.5" +const Version = "1.0.6"